<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Doxygen: pcl::registration::FPCSInitialAlignment&lt; PointSource, PointTarget, NormalT, Scalar &gt; 模板类 参考</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Doxygen
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','搜索');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#pub-methods">Public 成员函数</a> &#124;
<a href="#pro-methods">Protected 成员函数</a> &#124;
<a href="#pro-attribs">Protected 属性</a> &#124;
<a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment-members.html">所有成员列表</a>  </div>
  <div class="headertitle">
<div class="title">pcl::registration::FPCSInitialAlignment&lt; PointSource, PointTarget, NormalT, Scalar &gt; 模板类 参考</div>  </div>
</div><!--header-->
<div class="contents">

<p><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html" title="FPCSInitialAlignment computes corresponding four point congruent sets as described in: &quot;4-points cong...">FPCSInitialAlignment</a> computes corresponding four point congruent sets as described in: "4-points congruent sets for robust pairwise surface registration", Dror Aiger, Niloy Mitra, Daniel Cohen-Or. ACM Transactions on Graphics, vol. 27(3), 2008  
 <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#details">更多...</a></p>

<p><code>#include &lt;<a class="el" href="ia__fpcs_8h_source.html">ia_fpcs.h</a>&gt;</code></p>
<div class="dynheader">
类 pcl::registration::FPCSInitialAlignment&lt; PointSource, PointTarget, NormalT, Scalar &gt; 继承关系图:</div>
<div class="dyncontent">
 <div class="center">
  <img src="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.png" usemap="#pcl::registration::FPCSInitialAlignment_3C_20PointSource_2C_20PointTarget_2C_20NormalT_2C_20Scalar_20_3E_map" alt=""/>
  <map id="pcl::registration::FPCSInitialAlignment_3C_20PointSource_2C_20PointTarget_2C_20NormalT_2C_20Scalar_20_3E_map" name="pcl::registration::FPCSInitialAlignment_3C_20PointSource_2C_20PointTarget_2C_20NormalT_2C_20Scalar_20_3E_map">
<area href="classpcl_1_1_registration.html" alt="pcl::Registration&lt; PointSource, PointTarget, float &gt;" shape="rect" coords="0,56,489,80"/>
<area href="classpcl_1_1_p_c_l_base.html" alt="pcl::PCLBase&lt; PointSource &gt;" shape="rect" coords="0,0,489,24"/>
  </map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public 成员函数</h2></td></tr>
<tr class="memitem:aa7d70d10a9c44c2f1ffa575c8c657da6"><td class="memItemLeft" align="right" valign="top"><a id="aa7d70d10a9c44c2f1ffa575c8c657da6"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#aa7d70d10a9c44c2f1ffa575c8c657da6">FPCSInitialAlignment</a> ()</td></tr>
<tr class="memdesc:aa7d70d10a9c44c2f1ffa575c8c657da6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. Resets the maximum number of iterations to 0 thus forcing an internal computation if not set by the user. Sets the number of RANSAC iterations to 1000 and the standard transformation estimation to <a class="el" href="classpcl_1_1registration_1_1_transformation_estimation3_point.html" title="TransformationEstimation3Points represents the class for transformation estimation based on:">TransformationEstimation3Point</a>. <br /></td></tr>
<tr class="separator:aa7d70d10a9c44c2f1ffa575c8c657da6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9db7b47e57d9d8a632576a999c3a3f2c"><td class="memItemLeft" align="right" valign="top"><a id="a9db7b47e57d9d8a632576a999c3a3f2c"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a9db7b47e57d9d8a632576a999c3a3f2c">~FPCSInitialAlignment</a> ()</td></tr>
<tr class="memdesc:a9db7b47e57d9d8a632576a999c3a3f2c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <br /></td></tr>
<tr class="separator:a9db7b47e57d9d8a632576a999c3a3f2c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab46e5073a10bc995892851dacfb08b9b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ab46e5073a10bc995892851dacfb08b9b">setTargetIndices</a> (const IndicesPtr &amp;target_indices)</td></tr>
<tr class="memdesc:ab46e5073a10bc995892851dacfb08b9b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the vector of target indices.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ab46e5073a10bc995892851dacfb08b9b">更多...</a><br /></td></tr>
<tr class="separator:ab46e5073a10bc995892851dacfb08b9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a85d2bad3d4e64d1f1ba785811e29e012"><td class="memItemLeft" align="right" valign="top">IndicesPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a85d2bad3d4e64d1f1ba785811e29e012">getTargetIndices</a> () const</td></tr>
<tr class="separator:a85d2bad3d4e64d1f1ba785811e29e012"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9d5b57625988fd5c3bf4a9d5c21c85c6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a9d5b57625988fd5c3bf4a9d5c21c85c6">setSourceNormals</a> (const NormalsConstPtr &amp;source_normals)</td></tr>
<tr class="memdesc:a9d5b57625988fd5c3bf4a9d5c21c85c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the normals of the source point cloud.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a9d5b57625988fd5c3bf4a9d5c21c85c6">更多...</a><br /></td></tr>
<tr class="separator:a9d5b57625988fd5c3bf4a9d5c21c85c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa0e95c127d6ff418e4984919fb7f1005"><td class="memItemLeft" align="right" valign="top">NormalsConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#aa0e95c127d6ff418e4984919fb7f1005">getSourceNormals</a> () const</td></tr>
<tr class="separator:aa0e95c127d6ff418e4984919fb7f1005"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a026d369a066582d669a5591a682cc040"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a026d369a066582d669a5591a682cc040">setTargetNormals</a> (const NormalsConstPtr &amp;target_normals)</td></tr>
<tr class="memdesc:a026d369a066582d669a5591a682cc040"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the normals of the target point cloud.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a026d369a066582d669a5591a682cc040">更多...</a><br /></td></tr>
<tr class="separator:a026d369a066582d669a5591a682cc040"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa17c6751d2fb08647ffbcbfbbba4e32e"><td class="memItemLeft" align="right" valign="top">NormalsConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#aa17c6751d2fb08647ffbcbfbbba4e32e">getTargetNormals</a> () const</td></tr>
<tr class="separator:aa17c6751d2fb08647ffbcbfbbba4e32e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab9b80f921aadde46ed70b43f4532d667"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ab9b80f921aadde46ed70b43f4532d667">setNumberOfThreads</a> (int nr_threads)</td></tr>
<tr class="memdesc:ab9b80f921aadde46ed70b43f4532d667"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the number of used threads if OpenMP is activated.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ab9b80f921aadde46ed70b43f4532d667">更多...</a><br /></td></tr>
<tr class="separator:ab9b80f921aadde46ed70b43f4532d667"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a131f83c6bcfabdba77e755bdb67a5953"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a131f83c6bcfabdba77e755bdb67a5953">getNumberOfThreads</a> () const</td></tr>
<tr class="separator:a131f83c6bcfabdba77e755bdb67a5953"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec7f1feeb435aa54f101d2e7bbd72f21"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#aec7f1feeb435aa54f101d2e7bbd72f21">setDelta</a> (float delta, bool normalize=false)</td></tr>
<tr class="memdesc:aec7f1feeb435aa54f101d2e7bbd72f21"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the constant factor delta which weights the internally calculated parameters.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#aec7f1feeb435aa54f101d2e7bbd72f21">更多...</a><br /></td></tr>
<tr class="separator:aec7f1feeb435aa54f101d2e7bbd72f21"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab36ed0e1cc87ec8a08ae2f0bb98025ae"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ab36ed0e1cc87ec8a08ae2f0bb98025ae">getDelta</a> () const</td></tr>
<tr class="separator:ab36ed0e1cc87ec8a08ae2f0bb98025ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abc0d762f0db804c6cb9bf920d40cc489"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#abc0d762f0db804c6cb9bf920d40cc489">setApproxOverlap</a> (float approx_overlap)</td></tr>
<tr class="memdesc:abc0d762f0db804c6cb9bf920d40cc489"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the approximate overlap between source and target.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#abc0d762f0db804c6cb9bf920d40cc489">更多...</a><br /></td></tr>
<tr class="separator:abc0d762f0db804c6cb9bf920d40cc489"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab96ec3601da6099b68eaf6f717d065c8"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ab96ec3601da6099b68eaf6f717d065c8">getApproxOverlap</a> () const</td></tr>
<tr class="separator:ab96ec3601da6099b68eaf6f717d065c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4fba9748dd98686d0008fbef54a9b5f4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a4fba9748dd98686d0008fbef54a9b5f4">setScoreThreshold</a> (float score_threshold)</td></tr>
<tr class="memdesc:a4fba9748dd98686d0008fbef54a9b5f4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the scoring threshold used for early finishing the method.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a4fba9748dd98686d0008fbef54a9b5f4">更多...</a><br /></td></tr>
<tr class="separator:a4fba9748dd98686d0008fbef54a9b5f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a78bb7383b970ab1506467cb4f56ad52e"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a78bb7383b970ab1506467cb4f56ad52e">getScoreThreshold</a> () const</td></tr>
<tr class="separator:a78bb7383b970ab1506467cb4f56ad52e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2824fb50e0505f063b34b4b4025d0b3d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a2824fb50e0505f063b34b4b4025d0b3d">setNumberOfSamples</a> (int nr_samples)</td></tr>
<tr class="memdesc:a2824fb50e0505f063b34b4b4025d0b3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the number of source samples to use during alignment.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a2824fb50e0505f063b34b4b4025d0b3d">更多...</a><br /></td></tr>
<tr class="separator:a2824fb50e0505f063b34b4b4025d0b3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a253131c45e83164d20c55fdab9048381"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a253131c45e83164d20c55fdab9048381">getNumberOfSamples</a> () const</td></tr>
<tr class="separator:a253131c45e83164d20c55fdab9048381"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5a9a5e68448776b198ca6ab7de3f9a15"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a5a9a5e68448776b198ca6ab7de3f9a15">setMaxNormalDifference</a> (float max_norm_diff)</td></tr>
<tr class="memdesc:a5a9a5e68448776b198ca6ab7de3f9a15"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the maximum normal difference between valid point correspondences in degree.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a5a9a5e68448776b198ca6ab7de3f9a15">更多...</a><br /></td></tr>
<tr class="separator:a5a9a5e68448776b198ca6ab7de3f9a15"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaf0bead72f8615e1b2a1c95d9fde56e9"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#aaf0bead72f8615e1b2a1c95d9fde56e9">getMaxNormalDifference</a> () const</td></tr>
<tr class="separator:aaf0bead72f8615e1b2a1c95d9fde56e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab3d8c0104ac8609d0339a93eeecc4122"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ab3d8c0104ac8609d0339a93eeecc4122">setMaxComputationTime</a> (int max_runtime)</td></tr>
<tr class="memdesc:ab3d8c0104ac8609d0339a93eeecc4122"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the maximum computation time in seconds.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ab3d8c0104ac8609d0339a93eeecc4122">更多...</a><br /></td></tr>
<tr class="separator:ab3d8c0104ac8609d0339a93eeecc4122"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8db91266814752951a372d4e5e54dab2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a8db91266814752951a372d4e5e54dab2">getMaxComputationTime</a> () const</td></tr>
<tr class="separator:a8db91266814752951a372d4e5e54dab2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a40426ed25237b5919e3a4697a81a8da6"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a40426ed25237b5919e3a4697a81a8da6">getFitnessScore</a> () const</td></tr>
<tr class="separator:a40426ed25237b5919e3a4697a81a8da6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classpcl_1_1_registration"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classpcl_1_1_registration')"><img src="closed.png" alt="-"/>&#160;Public 成员函数 继承自 <a class="el" href="classpcl_1_1_registration.html">pcl::Registration&lt; PointSource, PointTarget, float &gt;</a></td></tr>
<tr class="memitem:a83a7a76a4c9d467c3a7bacdc4062f810 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a83a7a76a4c9d467c3a7bacdc4062f810"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a83a7a76a4c9d467c3a7bacdc4062f810">Registration</a> ()</td></tr>
<tr class="memdesc:a83a7a76a4c9d467c3a7bacdc4062f810 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty constructor. <br /></td></tr>
<tr class="separator:a83a7a76a4c9d467c3a7bacdc4062f810 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a612ce0633b614644e481a0affea2a352 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a612ce0633b614644e481a0affea2a352"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a612ce0633b614644e481a0affea2a352">~Registration</a> ()</td></tr>
<tr class="memdesc:a612ce0633b614644e481a0affea2a352 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">destructor. <br /></td></tr>
<tr class="separator:a612ce0633b614644e481a0affea2a352 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad16bd1099eb60c9ac26fdc6c56058029 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ad16bd1099eb60c9ac26fdc6c56058029">setTransformationEstimation</a> (const TransformationEstimationPtr &amp;te)</td></tr>
<tr class="memdesc:ad16bd1099eb60c9ac26fdc6c56058029 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the transformation estimation object. (e.g., SVD, point to plane etc.)  <a href="classpcl_1_1_registration.html#ad16bd1099eb60c9ac26fdc6c56058029">更多...</a><br /></td></tr>
<tr class="separator:ad16bd1099eb60c9ac26fdc6c56058029 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a34f8e20116d171898515ed94997c3c7d inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a34f8e20116d171898515ed94997c3c7d">setCorrespondenceEstimation</a> (const CorrespondenceEstimationPtr &amp;ce)</td></tr>
<tr class="memdesc:a34f8e20116d171898515ed94997c3c7d inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the correspondence estimation object. (e.g., regular, reciprocal, normal shooting etc.)  <a href="classpcl_1_1_registration.html#a34f8e20116d171898515ed94997c3c7d">更多...</a><br /></td></tr>
<tr class="separator:a34f8e20116d171898515ed94997c3c7d inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6a111fe9b14dc3c65ca420b640e42de9 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a6a111fe9b14dc3c65ca420b640e42de9">setInputCloud</a> (const PointCloudSourceConstPtr &amp;cloud)</td></tr>
<tr class="memdesc:a6a111fe9b14dc3c65ca420b640e42de9 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the input source (e.g., the point cloud that we want to align to the target)  <a href="classpcl_1_1_registration.html#a6a111fe9b14dc3c65ca420b640e42de9">更多...</a><br /></td></tr>
<tr class="separator:a6a111fe9b14dc3c65ca420b640e42de9 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a27a6eb286aef8d790a6570018e0dfa9b inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a27a6eb286aef8d790a6570018e0dfa9b"></a>
PointCloudSourceConstPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a27a6eb286aef8d790a6570018e0dfa9b">getInputCloud</a> ()</td></tr>
<tr class="memdesc:a27a6eb286aef8d790a6570018e0dfa9b inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the input point cloud dataset target. <br /></td></tr>
<tr class="separator:a27a6eb286aef8d790a6570018e0dfa9b inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a931144f549047b081c413e96a2fd70d6 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a931144f549047b081c413e96a2fd70d6">setInputSource</a> (const PointCloudSourceConstPtr &amp;cloud)</td></tr>
<tr class="memdesc:a931144f549047b081c413e96a2fd70d6 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the input source (e.g., the point cloud that we want to align to the target)  <a href="classpcl_1_1_registration.html#a931144f549047b081c413e96a2fd70d6">更多...</a><br /></td></tr>
<tr class="separator:a931144f549047b081c413e96a2fd70d6 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac0d56239d2f0d7c567f9402a177d3a0e inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ac0d56239d2f0d7c567f9402a177d3a0e"></a>
PointCloudSourceConstPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ac0d56239d2f0d7c567f9402a177d3a0e">getInputSource</a> ()</td></tr>
<tr class="memdesc:ac0d56239d2f0d7c567f9402a177d3a0e inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the input point cloud dataset target. <br /></td></tr>
<tr class="separator:ac0d56239d2f0d7c567f9402a177d3a0e inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4c4e69008295052913c76175797b99a9 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a4c4e69008295052913c76175797b99a9">setInputTarget</a> (const PointCloudTargetConstPtr &amp;cloud)</td></tr>
<tr class="memdesc:a4c4e69008295052913c76175797b99a9 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the input target (e.g., the point cloud that we want to align the input source to)  <a href="classpcl_1_1_registration.html#a4c4e69008295052913c76175797b99a9">更多...</a><br /></td></tr>
<tr class="separator:a4c4e69008295052913c76175797b99a9 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a97259be9f630f5f21ef60e3e62f8fa47 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a97259be9f630f5f21ef60e3e62f8fa47"></a>
PointCloudTargetConstPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a97259be9f630f5f21ef60e3e62f8fa47">getInputTarget</a> ()</td></tr>
<tr class="memdesc:a97259be9f630f5f21ef60e3e62f8fa47 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the input point cloud dataset target. <br /></td></tr>
<tr class="separator:a97259be9f630f5f21ef60e3e62f8fa47 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a409442a0f43b73e1227335307b1d9ccc inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a409442a0f43b73e1227335307b1d9ccc">setSearchMethodTarget</a> (const KdTreePtr &amp;tree, bool force_no_recompute=false)</td></tr>
<tr class="memdesc:a409442a0f43b73e1227335307b1d9ccc inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the search object used to find correspondences in the target cloud.  <a href="classpcl_1_1_registration.html#a409442a0f43b73e1227335307b1d9ccc">更多...</a><br /></td></tr>
<tr class="separator:a409442a0f43b73e1227335307b1d9ccc inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7600327adbe8c11394c52f13364133cd inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a7600327adbe8c11394c52f13364133cd"></a>
KdTreePtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a7600327adbe8c11394c52f13364133cd">getSearchMethodTarget</a> () const</td></tr>
<tr class="memdesc:a7600327adbe8c11394c52f13364133cd inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the search method used to find correspondences in the target cloud. <br /></td></tr>
<tr class="separator:a7600327adbe8c11394c52f13364133cd inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3bfafcf5966b90f513f52ff0a7a42f37 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a3bfafcf5966b90f513f52ff0a7a42f37">setSearchMethodSource</a> (const KdTreeReciprocalPtr &amp;tree, bool force_no_recompute=false)</td></tr>
<tr class="memdesc:a3bfafcf5966b90f513f52ff0a7a42f37 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the search object used to find correspondences in the source cloud (usually used by reciprocal correspondence finding).  <a href="classpcl_1_1_registration.html#a3bfafcf5966b90f513f52ff0a7a42f37">更多...</a><br /></td></tr>
<tr class="separator:a3bfafcf5966b90f513f52ff0a7a42f37 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:add717357d14e16c3d71eefe8cd658343 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="add717357d14e16c3d71eefe8cd658343"></a>
KdTreeReciprocalPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#add717357d14e16c3d71eefe8cd658343">getSearchMethodSource</a> () const</td></tr>
<tr class="memdesc:add717357d14e16c3d71eefe8cd658343 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the search method used to find correspondences in the source cloud. <br /></td></tr>
<tr class="separator:add717357d14e16c3d71eefe8cd658343 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1e68bd39ac943131dcbf1431f9afe3f3 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a1e68bd39ac943131dcbf1431f9afe3f3"></a>
Matrix4&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a1e68bd39ac943131dcbf1431f9afe3f3">getFinalTransformation</a> ()</td></tr>
<tr class="memdesc:a1e68bd39ac943131dcbf1431f9afe3f3 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the final transformation matrix estimated by the registration method. <br /></td></tr>
<tr class="separator:a1e68bd39ac943131dcbf1431f9afe3f3 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a86b11948c03bee5474b2224bf988f701 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a86b11948c03bee5474b2224bf988f701"></a>
Matrix4&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a86b11948c03bee5474b2224bf988f701">getLastIncrementalTransformation</a> ()</td></tr>
<tr class="memdesc:a86b11948c03bee5474b2224bf988f701 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the last incremental transformation matrix estimated by the registration method. <br /></td></tr>
<tr class="separator:a86b11948c03bee5474b2224bf988f701 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3844d186f7a99d15464368e0f25635ed inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a3844d186f7a99d15464368e0f25635ed">setMaximumIterations</a> (int nr_iterations)</td></tr>
<tr class="memdesc:a3844d186f7a99d15464368e0f25635ed inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the maximum number of iterations the internal optimization should run for.  <a href="classpcl_1_1_registration.html#a3844d186f7a99d15464368e0f25635ed">更多...</a><br /></td></tr>
<tr class="separator:a3844d186f7a99d15464368e0f25635ed inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adf1c20667e8bc292a687c9664fd30735 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="adf1c20667e8bc292a687c9664fd30735"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#adf1c20667e8bc292a687c9664fd30735">getMaximumIterations</a> ()</td></tr>
<tr class="memdesc:adf1c20667e8bc292a687c9664fd30735 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the maximum number of iterations the internal optimization should run for, as set by the user. <br /></td></tr>
<tr class="separator:adf1c20667e8bc292a687c9664fd30735 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1fbe7e76761563c44cb2460376ed5e53 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a1fbe7e76761563c44cb2460376ed5e53">setRANSACIterations</a> (int ransac_iterations)</td></tr>
<tr class="memdesc:a1fbe7e76761563c44cb2460376ed5e53 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the number of iterations RANSAC should run for.  <a href="classpcl_1_1_registration.html#a1fbe7e76761563c44cb2460376ed5e53">更多...</a><br /></td></tr>
<tr class="separator:a1fbe7e76761563c44cb2460376ed5e53 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:affcce068a7d132be1eb299d509390ca1 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="affcce068a7d132be1eb299d509390ca1"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#affcce068a7d132be1eb299d509390ca1">getRANSACIterations</a> ()</td></tr>
<tr class="memdesc:affcce068a7d132be1eb299d509390ca1 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the number of iterations RANSAC should run for, as set by the user. <br /></td></tr>
<tr class="separator:affcce068a7d132be1eb299d509390ca1 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a64db6d25e2707a174dbad28f2484bffe inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a64db6d25e2707a174dbad28f2484bffe">setRANSACOutlierRejectionThreshold</a> (double inlier_threshold)</td></tr>
<tr class="memdesc:a64db6d25e2707a174dbad28f2484bffe inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the inlier distance threshold for the internal RANSAC outlier rejection loop.  <a href="classpcl_1_1_registration.html#a64db6d25e2707a174dbad28f2484bffe">更多...</a><br /></td></tr>
<tr class="separator:a64db6d25e2707a174dbad28f2484bffe inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6b4ae8d2e7b280de376b1e8a3956157e inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a6b4ae8d2e7b280de376b1e8a3956157e"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a6b4ae8d2e7b280de376b1e8a3956157e">getRANSACOutlierRejectionThreshold</a> ()</td></tr>
<tr class="memdesc:a6b4ae8d2e7b280de376b1e8a3956157e inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the inlier distance threshold for the internal outlier rejection loop as set by the user. <br /></td></tr>
<tr class="separator:a6b4ae8d2e7b280de376b1e8a3956157e inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a65596dcc3cb5d2647857226fb3d999a5 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a65596dcc3cb5d2647857226fb3d999a5">setMaxCorrespondenceDistance</a> (double distance_threshold)</td></tr>
<tr class="memdesc:a65596dcc3cb5d2647857226fb3d999a5 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the maximum distance threshold between two correspondent points in source &lt;-&gt; target. If the distance is larger than this threshold, the points will be ignored in the alignment process.  <a href="classpcl_1_1_registration.html#a65596dcc3cb5d2647857226fb3d999a5">更多...</a><br /></td></tr>
<tr class="separator:a65596dcc3cb5d2647857226fb3d999a5 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a71fec358f22d434de9a654b6ffd5949f inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a71fec358f22d434de9a654b6ffd5949f"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a71fec358f22d434de9a654b6ffd5949f">getMaxCorrespondenceDistance</a> ()</td></tr>
<tr class="memdesc:a71fec358f22d434de9a654b6ffd5949f inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the maximum distance threshold between two correspondent points in source &lt;-&gt; target. If the distance is larger than this threshold, the points will be ignored in the alignment process. <br /></td></tr>
<tr class="separator:a71fec358f22d434de9a654b6ffd5949f inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec74ab878cca8d62fd1be9942685a8c1 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#aec74ab878cca8d62fd1be9942685a8c1">setTransformationEpsilon</a> (double epsilon)</td></tr>
<tr class="memdesc:aec74ab878cca8d62fd1be9942685a8c1 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the transformation epsilon (maximum allowable difference between two consecutive transformations) in order for an optimization to be considered as having converged to the final solution.  <a href="classpcl_1_1_registration.html#aec74ab878cca8d62fd1be9942685a8c1">更多...</a><br /></td></tr>
<tr class="separator:aec74ab878cca8d62fd1be9942685a8c1 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a19024853d8480a0e4bc3193f6f75f7c8 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a19024853d8480a0e4bc3193f6f75f7c8"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a19024853d8480a0e4bc3193f6f75f7c8">getTransformationEpsilon</a> ()</td></tr>
<tr class="memdesc:a19024853d8480a0e4bc3193f6f75f7c8 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the transformation epsilon (maximum allowable difference between two consecutive transformations) as set by the user. <br /></td></tr>
<tr class="separator:a19024853d8480a0e4bc3193f6f75f7c8 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeb0bb4577dbe144bd467d4a9632b84d8 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#aeb0bb4577dbe144bd467d4a9632b84d8">setEuclideanFitnessEpsilon</a> (double epsilon)</td></tr>
<tr class="memdesc:aeb0bb4577dbe144bd467d4a9632b84d8 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the maximum allowed Euclidean error between two consecutive steps in the ICP loop, before the algorithm is considered to have converged. The error is estimated as the sum of the differences between correspondences in an Euclidean sense, divided by the number of correspondences.  <a href="classpcl_1_1_registration.html#aeb0bb4577dbe144bd467d4a9632b84d8">更多...</a><br /></td></tr>
<tr class="separator:aeb0bb4577dbe144bd467d4a9632b84d8 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a71b9fa3e4d1285d16361efe4d0634bde inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a71b9fa3e4d1285d16361efe4d0634bde"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a71b9fa3e4d1285d16361efe4d0634bde">getEuclideanFitnessEpsilon</a> ()</td></tr>
<tr class="memdesc:a71b9fa3e4d1285d16361efe4d0634bde inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the maximum allowed distance error before the algorithm will be considered to have converged, as set by the user. See <a class="el" href="classpcl_1_1_registration.html#aeb0bb4577dbe144bd467d4a9632b84d8">setEuclideanFitnessEpsilon</a> <br /></td></tr>
<tr class="separator:a71b9fa3e4d1285d16361efe4d0634bde inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5da970b4fbd4d1dfbaa4ab76d3d7d22e inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a5da970b4fbd4d1dfbaa4ab76d3d7d22e">setPointRepresentation</a> (const PointRepresentationConstPtr &amp;point_representation)</td></tr>
<tr class="memdesc:a5da970b4fbd4d1dfbaa4ab76d3d7d22e inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a boost shared pointer to the PointRepresentation to be used when comparing points  <a href="classpcl_1_1_registration.html#a5da970b4fbd4d1dfbaa4ab76d3d7d22e">更多...</a><br /></td></tr>
<tr class="separator:a5da970b4fbd4d1dfbaa4ab76d3d7d22e inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac13dcb392c660cf311a689041ec63a5c inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ac13dcb392c660cf311a689041ec63a5c">registerVisualizationCallback</a> (boost::function&lt; FunctionSignature &gt; &amp;visualizerCallback)</td></tr>
<tr class="memdesc:ac13dcb392c660cf311a689041ec63a5c inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register the user callback function which will be called from registration thread in order to update point cloud obtained after each iteration  <a href="classpcl_1_1_registration.html#ac13dcb392c660cf311a689041ec63a5c">更多...</a><br /></td></tr>
<tr class="separator:ac13dcb392c660cf311a689041ec63a5c inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab26742c383b6f5e86fb96a236fb08728 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ab26742c383b6f5e86fb96a236fb08728">getFitnessScore</a> (double max_range=std::numeric_limits&lt; double &gt;::max())</td></tr>
<tr class="memdesc:ab26742c383b6f5e86fb96a236fb08728 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Obtain the Euclidean fitness score (e.g., sum of squared distances from the source to the target)  <a href="classpcl_1_1_registration.html#ab26742c383b6f5e86fb96a236fb08728">更多...</a><br /></td></tr>
<tr class="separator:ab26742c383b6f5e86fb96a236fb08728 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4b9c05b613e698af21f3cb048e611adc inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a4b9c05b613e698af21f3cb048e611adc">getFitnessScore</a> (const std::vector&lt; float &gt; &amp;distances_a, const std::vector&lt; float &gt; &amp;distances_b)</td></tr>
<tr class="memdesc:a4b9c05b613e698af21f3cb048e611adc inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Obtain the Euclidean fitness score (e.g., sum of squared distances from the source to the target) from two sets of correspondence distances (distances between source and target points)  <a href="classpcl_1_1_registration.html#a4b9c05b613e698af21f3cb048e611adc">更多...</a><br /></td></tr>
<tr class="separator:a4b9c05b613e698af21f3cb048e611adc inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7b91930ed75aaafec420ed223d1a111b inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a7b91930ed75aaafec420ed223d1a111b"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a7b91930ed75aaafec420ed223d1a111b">hasConverged</a> ()</td></tr>
<tr class="memdesc:a7b91930ed75aaafec420ed223d1a111b inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the state of convergence after the last align run <br /></td></tr>
<tr class="separator:a7b91930ed75aaafec420ed223d1a111b inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a96212303ca16b6d60020824086887c4f inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a96212303ca16b6d60020824086887c4f">align</a> (<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;output)</td></tr>
<tr class="memdesc:a96212303ca16b6d60020824086887c4f inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Call the registration algorithm which estimates the transformation and returns the transformed source (input) as <em>output</em>.  <a href="classpcl_1_1_registration.html#a96212303ca16b6d60020824086887c4f">更多...</a><br /></td></tr>
<tr class="separator:a96212303ca16b6d60020824086887c4f inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab1d64f86162b2df716ead8d978579c11 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ab1d64f86162b2df716ead8d978579c11">align</a> (<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;output, const Matrix4 &amp;guess)</td></tr>
<tr class="memdesc:ab1d64f86162b2df716ead8d978579c11 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Call the registration algorithm which estimates the transformation and returns the transformed source (input) as <em>output</em>.  <a href="classpcl_1_1_registration.html#ab1d64f86162b2df716ead8d978579c11">更多...</a><br /></td></tr>
<tr class="separator:ab1d64f86162b2df716ead8d978579c11 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a26eae6a42450893ca1c2ed81560159f2 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a26eae6a42450893ca1c2ed81560159f2"></a>
const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a26eae6a42450893ca1c2ed81560159f2">getClassName</a> () const</td></tr>
<tr class="memdesc:a26eae6a42450893ca1c2ed81560159f2 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Abstract class get name method. <br /></td></tr>
<tr class="separator:a26eae6a42450893ca1c2ed81560159f2 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0b42c13696bef68c50d5c3135bc573cf inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a0b42c13696bef68c50d5c3135bc573cf"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a0b42c13696bef68c50d5c3135bc573cf">initCompute</a> ()</td></tr>
<tr class="memdesc:a0b42c13696bef68c50d5c3135bc573cf inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal computation initalization. <br /></td></tr>
<tr class="separator:a0b42c13696bef68c50d5c3135bc573cf inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae210269f0404556b8dd7f4306084a91d inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ae210269f0404556b8dd7f4306084a91d"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ae210269f0404556b8dd7f4306084a91d">initComputeReciprocal</a> ()</td></tr>
<tr class="memdesc:ae210269f0404556b8dd7f4306084a91d inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal computation when reciprocal lookup is needed <br /></td></tr>
<tr class="separator:ae210269f0404556b8dd7f4306084a91d inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a663e64d6d5103eb937addd3e33104cf6 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a663e64d6d5103eb937addd3e33104cf6">addCorrespondenceRejector</a> (const CorrespondenceRejectorPtr &amp;rejector)</td></tr>
<tr class="memdesc:a663e64d6d5103eb937addd3e33104cf6 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a new correspondence rejector to the list  <a href="classpcl_1_1_registration.html#a663e64d6d5103eb937addd3e33104cf6">更多...</a><br /></td></tr>
<tr class="separator:a663e64d6d5103eb937addd3e33104cf6 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac0c221d8f1151096721db3817610c9d9 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ac0c221d8f1151096721db3817610c9d9"></a>
std::vector&lt; CorrespondenceRejectorPtr &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ac0c221d8f1151096721db3817610c9d9">getCorrespondenceRejectors</a> ()</td></tr>
<tr class="memdesc:ac0c221d8f1151096721db3817610c9d9 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the list of correspondence rejectors. <br /></td></tr>
<tr class="separator:ac0c221d8f1151096721db3817610c9d9 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a33d49f38bcb804bb893a14e3cd4ed31e inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a33d49f38bcb804bb893a14e3cd4ed31e">removeCorrespondenceRejector</a> (unsigned int i)</td></tr>
<tr class="memdesc:a33d49f38bcb804bb893a14e3cd4ed31e inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Remove the i-th correspondence rejector in the list  <a href="classpcl_1_1_registration.html#a33d49f38bcb804bb893a14e3cd4ed31e">更多...</a><br /></td></tr>
<tr class="separator:a33d49f38bcb804bb893a14e3cd4ed31e inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a169aeb5141fc6e1cec83582ae284aeaa inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a169aeb5141fc6e1cec83582ae284aeaa"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a169aeb5141fc6e1cec83582ae284aeaa">clearCorrespondenceRejectors</a> ()</td></tr>
<tr class="memdesc:a169aeb5141fc6e1cec83582ae284aeaa inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clear the list of correspondence rejectors. <br /></td></tr>
<tr class="separator:a169aeb5141fc6e1cec83582ae284aeaa inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Public 成员函数 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointSource &gt;</a></td></tr>
<tr class="memitem:af4fbc5eb005057f8a0fc6d60bde595df inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="af4fbc5eb005057f8a0fc6d60bde595df"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#af4fbc5eb005057f8a0fc6d60bde595df">PCLBase</a> ()</td></tr>
<tr class="memdesc:af4fbc5eb005057f8a0fc6d60bde595df inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty constructor. <br /></td></tr>
<tr class="separator:af4fbc5eb005057f8a0fc6d60bde595df inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7a6dd7a91275d7737cf1b18005b47244 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a7a6dd7a91275d7737cf1b18005b47244"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a7a6dd7a91275d7737cf1b18005b47244">PCLBase</a> (const <a class="el" href="classpcl_1_1_p_c_l_base.html">PCLBase</a> &amp;base)</td></tr>
<tr class="memdesc:a7a6dd7a91275d7737cf1b18005b47244 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor. <br /></td></tr>
<tr class="separator:a7a6dd7a91275d7737cf1b18005b47244 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5d6846e98e59c37dcc3dc9958d53966 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ad5d6846e98e59c37dcc3dc9958d53966"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#ad5d6846e98e59c37dcc3dc9958d53966">~PCLBase</a> ()</td></tr>
<tr class="memdesc:ad5d6846e98e59c37dcc3dc9958d53966 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <br /></td></tr>
<tr class="separator:ad5d6846e98e59c37dcc3dc9958d53966 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8cd745c4f7a792212f4fc3720b9d46ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a8cd745c4f7a792212f4fc3720b9d46ea"></a>
PointCloudConstPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a8cd745c4f7a792212f4fc3720b9d46ea">getInputCloud</a> () const</td></tr>
<tr class="memdesc:a8cd745c4f7a792212f4fc3720b9d46ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the input point cloud dataset. <br /></td></tr>
<tr class="separator:a8cd745c4f7a792212f4fc3720b9d46ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab219359de6eb34c9d51e2e976dd1a0d1 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#ab219359de6eb34c9d51e2e976dd1a0d1">setIndices</a> (const IndicesPtr &amp;indices)</td></tr>
<tr class="memdesc:ab219359de6eb34c9d51e2e976dd1a0d1 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the vector of indices that represents the input data.  <a href="classpcl_1_1_p_c_l_base.html#ab219359de6eb34c9d51e2e976dd1a0d1">更多...</a><br /></td></tr>
<tr class="separator:ab219359de6eb34c9d51e2e976dd1a0d1 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a436c68c74b31e4dd00000adfbb11ca7c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a436c68c74b31e4dd00000adfbb11ca7c">setIndices</a> (const IndicesConstPtr &amp;indices)</td></tr>
<tr class="memdesc:a436c68c74b31e4dd00000adfbb11ca7c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the vector of indices that represents the input data.  <a href="classpcl_1_1_p_c_l_base.html#a436c68c74b31e4dd00000adfbb11ca7c">更多...</a><br /></td></tr>
<tr class="separator:a436c68c74b31e4dd00000adfbb11ca7c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9cc90d8364ce968566f75800d3773ca inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#af9cc90d8364ce968566f75800d3773ca">setIndices</a> (const PointIndicesConstPtr &amp;indices)</td></tr>
<tr class="memdesc:af9cc90d8364ce968566f75800d3773ca inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the vector of indices that represents the input data.  <a href="classpcl_1_1_p_c_l_base.html#af9cc90d8364ce968566f75800d3773ca">更多...</a><br /></td></tr>
<tr class="separator:af9cc90d8364ce968566f75800d3773ca inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a930c7a6375fdf65ff8cfdb4eb4a6d996 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a930c7a6375fdf65ff8cfdb4eb4a6d996">setIndices</a> (size_t row_start, size_t col_start, size_t nb_rows, size_t nb_cols)</td></tr>
<tr class="memdesc:a930c7a6375fdf65ff8cfdb4eb4a6d996 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the indices for the points laying within an interest region of the point cloud.  <a href="classpcl_1_1_p_c_l_base.html#a930c7a6375fdf65ff8cfdb4eb4a6d996">更多...</a><br /></td></tr>
<tr class="separator:a930c7a6375fdf65ff8cfdb4eb4a6d996 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a058753dd4de73d3d0062fe2e452fba3c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a058753dd4de73d3d0062fe2e452fba3c"></a>
IndicesPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a058753dd4de73d3d0062fe2e452fba3c">getIndices</a> ()</td></tr>
<tr class="memdesc:a058753dd4de73d3d0062fe2e452fba3c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the vector of indices used. <br /></td></tr>
<tr class="separator:a058753dd4de73d3d0062fe2e452fba3c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acae187b37230758959572ceb1e6e2045 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="acae187b37230758959572ceb1e6e2045"></a>
IndicesConstPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#acae187b37230758959572ceb1e6e2045">getIndices</a> () const</td></tr>
<tr class="memdesc:acae187b37230758959572ceb1e6e2045 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the vector of indices used. <br /></td></tr>
<tr class="separator:acae187b37230758959572ceb1e6e2045 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af7335fedb0af0930b9d1dedcb54ba201 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">const PointSource &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#af7335fedb0af0930b9d1dedcb54ba201">operator[]</a> (size_t pos) const</td></tr>
<tr class="memdesc:af7335fedb0af0930b9d1dedcb54ba201 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Override PointCloud operator[] to shorten code  <a href="classpcl_1_1_p_c_l_base.html#af7335fedb0af0930b9d1dedcb54ba201">更多...</a><br /></td></tr>
<tr class="separator:af7335fedb0af0930b9d1dedcb54ba201 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected 成员函数</h2></td></tr>
<tr class="memitem:ab2c4309ae91b6c3bc6f5480cad22ec67"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ab2c4309ae91b6c3bc6f5480cad22ec67">computeTransformation</a> (PointCloudSource &amp;output, const Eigen::Matrix4f &amp;guess)</td></tr>
<tr class="memdesc:ab2c4309ae91b6c3bc6f5480cad22ec67"><td class="mdescLeft">&#160;</td><td class="mdescRight">Rigid transformation computation method.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ab2c4309ae91b6c3bc6f5480cad22ec67">更多...</a><br /></td></tr>
<tr class="separator:ab2c4309ae91b6c3bc6f5480cad22ec67"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9a399e9cc72e413f9ce769ce4896e10"><td class="memItemLeft" align="right" valign="top"><a id="af9a399e9cc72e413f9ce769ce4896e10"></a>
virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#af9a399e9cc72e413f9ce769ce4896e10">initCompute</a> ()</td></tr>
<tr class="memdesc:af9a399e9cc72e413f9ce769ce4896e10"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal computation initialization. <br /></td></tr>
<tr class="separator:af9a399e9cc72e413f9ce769ce4896e10"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac34b9f119a6d69a1b7a646bdb8e8dace"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac34b9f119a6d69a1b7a646bdb8e8dace">selectBase</a> (std::vector&lt; int &gt; &amp;base_indices, float(&amp;ratio)[2])</td></tr>
<tr class="memdesc:ac34b9f119a6d69a1b7a646bdb8e8dace"><td class="mdescLeft">&#160;</td><td class="mdescRight">Select an approximately coplanar set of four points from the source cloud.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac34b9f119a6d69a1b7a646bdb8e8dace">更多...</a><br /></td></tr>
<tr class="separator:ac34b9f119a6d69a1b7a646bdb8e8dace"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a16ab9f8757cec569bb0f38544141df7f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a16ab9f8757cec569bb0f38544141df7f">selectBaseTriangle</a> (std::vector&lt; int &gt; &amp;base_indices)</td></tr>
<tr class="memdesc:a16ab9f8757cec569bb0f38544141df7f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Select randomly a triplet of points with large point-to-point distances. The minimum point sampling distance is calculated based on the estimated point cloud overlap during initialization.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a16ab9f8757cec569bb0f38544141df7f">更多...</a><br /></td></tr>
<tr class="separator:a16ab9f8757cec569bb0f38544141df7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a607d3bf724f8304008a8e35a6b0a64c8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a607d3bf724f8304008a8e35a6b0a64c8">setupBase</a> (std::vector&lt; int &gt; &amp;base_indices, float(&amp;ratio)[2])</td></tr>
<tr class="memdesc:a607d3bf724f8304008a8e35a6b0a64c8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Setup the base (four coplanar points) by ordering the points and computing intersection ratios and segment to segment distances of base diagonal.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a607d3bf724f8304008a8e35a6b0a64c8">更多...</a><br /></td></tr>
<tr class="separator:a607d3bf724f8304008a8e35a6b0a64c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac421e4c56100d9e5a2355252eb9a3643"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac421e4c56100d9e5a2355252eb9a3643">segmentToSegmentDist</a> (const std::vector&lt; int &gt; &amp;base_indices, float(&amp;ratio)[2])</td></tr>
<tr class="memdesc:ac421e4c56100d9e5a2355252eb9a3643"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate intersection ratios and segment to segment distances of base diagonals.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac421e4c56100d9e5a2355252eb9a3643">更多...</a><br /></td></tr>
<tr class="separator:ac421e4c56100d9e5a2355252eb9a3643"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1392b97316249b70eddde0428ca317c9"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a1392b97316249b70eddde0428ca317c9">bruteForceCorrespondences</a> (int idx1, int idx2, pcl::Correspondences &amp;pairs)</td></tr>
<tr class="memdesc:a1392b97316249b70eddde0428ca317c9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Search for corresponding point pairs given the distance between two base points.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a1392b97316249b70eddde0428ca317c9">更多...</a><br /></td></tr>
<tr class="separator:a1392b97316249b70eddde0428ca317c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a37b21d4669718973b6ab1aa8936a1704"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a37b21d4669718973b6ab1aa8936a1704">determineBaseMatches</a> (const std::vector&lt; int &gt; &amp;base_indices, std::vector&lt; std::vector&lt; int &gt; &gt; &amp;matches, const pcl::Correspondences &amp;pairs_a, const pcl::Correspondences &amp;pairs_b, const float(&amp;ratio)[2])</td></tr>
<tr class="memdesc:a37b21d4669718973b6ab1aa8936a1704"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine base matches by combining the point pair candidate and search for coinciding intersection points using the diagonal segment ratios of base B. The coincidation threshold is calculated during initialization (coincidation_limit_).  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a37b21d4669718973b6ab1aa8936a1704">更多...</a><br /></td></tr>
<tr class="separator:a37b21d4669718973b6ab1aa8936a1704"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac6ccba63325f96f5e38fc065b0897ea3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac6ccba63325f96f5e38fc065b0897ea3">checkBaseMatch</a> (const std::vector&lt; int &gt; &amp;match_indices, const float(&amp;ds)[4])</td></tr>
<tr class="memdesc:ac6ccba63325f96f5e38fc065b0897ea3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if outer rectangle distance of matched points fit with the base rectangle.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac6ccba63325f96f5e38fc065b0897ea3">更多...</a><br /></td></tr>
<tr class="separator:ac6ccba63325f96f5e38fc065b0897ea3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0d59c76f9a58f59caf2b63e377aca6bb"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a0d59c76f9a58f59caf2b63e377aca6bb">handleMatches</a> (const std::vector&lt; int &gt; &amp;base_indices, std::vector&lt; std::vector&lt; int &gt; &gt; &amp;matches, MatchingCandidates &amp;candidates)</td></tr>
<tr class="memdesc:a0d59c76f9a58f59caf2b63e377aca6bb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Method to handle current candidate matches. Here we validate and evaluate the matches w.r.t the base and store the best fitting match (together with its score and estimated transformation).  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a0d59c76f9a58f59caf2b63e377aca6bb">更多...</a><br /></td></tr>
<tr class="separator:a0d59c76f9a58f59caf2b63e377aca6bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab5b94e6b02f11c17f4b10af2c89f6228"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ab5b94e6b02f11c17f4b10af2c89f6228">linkMatchWithBase</a> (const std::vector&lt; int &gt; &amp;base_indices, std::vector&lt; int &gt; &amp;match_indices, pcl::Correspondences &amp;correspondences)</td></tr>
<tr class="memdesc:ab5b94e6b02f11c17f4b10af2c89f6228"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the correspondences between the base B and the match M by using the distance of each point to the centroid of the rectangle.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ab5b94e6b02f11c17f4b10af2c89f6228">更多...</a><br /></td></tr>
<tr class="separator:ab5b94e6b02f11c17f4b10af2c89f6228"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac63173082b064d29ac50cee964ec930e"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac63173082b064d29ac50cee964ec930e">validateMatch</a> (const std::vector&lt; int &gt; &amp;base_indices, const std::vector&lt; int &gt; &amp;match_indices, const pcl::Correspondences &amp;correspondences, Eigen::Matrix4f &amp;transformation)</td></tr>
<tr class="memdesc:ac63173082b064d29ac50cee964ec930e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Validate the matching by computing the transformation between the source and target based on the four matched points and by comparing the mean square error (MSE) to a threshold. The MSE limit was calculated during initialization (max_mse_).  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac63173082b064d29ac50cee964ec930e">更多...</a><br /></td></tr>
<tr class="separator:ac63173082b064d29ac50cee964ec930e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2e628406e7a4bfbc06754fc89da60c2b"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a2e628406e7a4bfbc06754fc89da60c2b">validateTransformation</a> (Eigen::Matrix4f &amp;transformation, float &amp;fitness_score)</td></tr>
<tr class="memdesc:a2e628406e7a4bfbc06754fc89da60c2b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Validate the transformation by calculating the number of inliers after transforming the source cloud. The resulting fitness score is later used as the decision criteria of the best fitting match.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a2e628406e7a4bfbc06754fc89da60c2b">更多...</a><br /></td></tr>
<tr class="separator:a2e628406e7a4bfbc06754fc89da60c2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0182f309b73f20835d5ca7356fa167dc"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a0182f309b73f20835d5ca7356fa167dc">finalCompute</a> (const std::vector&lt; MatchingCandidates &gt; &amp;candidates)</td></tr>
<tr class="memdesc:a0182f309b73f20835d5ca7356fa167dc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Final computation of best match out of vector of best matches. To avoid cross thread dependencies during parallel running, a best match for each try was calculated.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a0182f309b73f20835d5ca7356fa167dc">更多...</a><br /></td></tr>
<tr class="separator:a0182f309b73f20835d5ca7356fa167dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_methods_classpcl_1_1_registration"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classpcl_1_1_registration')"><img src="closed.png" alt="-"/>&#160;Protected 成员函数 继承自 <a class="el" href="classpcl_1_1_registration.html">pcl::Registration&lt; PointSource, PointTarget, float &gt;</a></td></tr>
<tr class="memitem:abbeeee9510e44239d47b3c8079ee7c20 inherit pro_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#abbeeee9510e44239d47b3c8079ee7c20">searchForNeighbors</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;cloud, int index, std::vector&lt; int &gt; &amp;indices, std::vector&lt; float &gt; &amp;distances)</td></tr>
<tr class="memdesc:abbeeee9510e44239d47b3c8079ee7c20 inherit pro_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Search for the closest nearest neighbor of a given point.  <a href="classpcl_1_1_registration.html#abbeeee9510e44239d47b3c8079ee7c20">更多...</a><br /></td></tr>
<tr class="separator:abbeeee9510e44239d47b3c8079ee7c20 inherit pro_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae5eb5d425e7cc8a998f0e4b1b253a6f5 inherit pro_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ae5eb5d425e7cc8a998f0e4b1b253a6f5"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ae5eb5d425e7cc8a998f0e4b1b253a6f5">computeTransformation</a> (<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;output, const Matrix4 &amp;guess)=0</td></tr>
<tr class="memdesc:ae5eb5d425e7cc8a998f0e4b1b253a6f5 inherit pro_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Abstract transformation computation method with initial guess <br /></td></tr>
<tr class="separator:ae5eb5d425e7cc8a998f0e4b1b253a6f5 inherit pro_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_methods_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Protected 成员函数 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointSource &gt;</a></td></tr>
<tr class="memitem:acceb20854934f4cf77e266eb5a44d4f0 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#acceb20854934f4cf77e266eb5a44d4f0">initCompute</a> ()</td></tr>
<tr class="memdesc:acceb20854934f4cf77e266eb5a44d4f0 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">This method should get called before starting the actual computation.  <a href="classpcl_1_1_p_c_l_base.html#acceb20854934f4cf77e266eb5a44d4f0">更多...</a><br /></td></tr>
<tr class="separator:acceb20854934f4cf77e266eb5a44d4f0 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afc426c4eebb94b7734d4fa556bff1420 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="afc426c4eebb94b7734d4fa556bff1420"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#afc426c4eebb94b7734d4fa556bff1420">deinitCompute</a> ()</td></tr>
<tr class="memdesc:afc426c4eebb94b7734d4fa556bff1420 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">This method should get called after finishing the actual computation. <br /></td></tr>
<tr class="separator:afc426c4eebb94b7734d4fa556bff1420 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected 属性</h2></td></tr>
<tr class="memitem:a58a3035634e2177a521437b7242e7e5f"><td class="memItemLeft" align="right" valign="top"><a id="a58a3035634e2177a521437b7242e7e5f"></a>
NormalsConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a58a3035634e2177a521437b7242e7e5f">source_normals_</a></td></tr>
<tr class="memdesc:a58a3035634e2177a521437b7242e7e5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Normals of source point cloud. <br /></td></tr>
<tr class="separator:a58a3035634e2177a521437b7242e7e5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a584efd5f1587d8bbdca3b2c5de69b25d"><td class="memItemLeft" align="right" valign="top"><a id="a584efd5f1587d8bbdca3b2c5de69b25d"></a>
NormalsConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a584efd5f1587d8bbdca3b2c5de69b25d">target_normals_</a></td></tr>
<tr class="memdesc:a584efd5f1587d8bbdca3b2c5de69b25d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Normals of target point cloud. <br /></td></tr>
<tr class="separator:a584efd5f1587d8bbdca3b2c5de69b25d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79ee6d98864fca46bc61903e8b609120"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a79ee6d98864fca46bc61903e8b609120">nr_threads_</a></td></tr>
<tr class="memdesc:a79ee6d98864fca46bc61903e8b609120"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of threads for parallelization (standard = 1).  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a79ee6d98864fca46bc61903e8b609120">更多...</a><br /></td></tr>
<tr class="separator:a79ee6d98864fca46bc61903e8b609120"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a68e2113bbe29d792687e75ba5356c95e"><td class="memItemLeft" align="right" valign="top"><a id="a68e2113bbe29d792687e75ba5356c95e"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a68e2113bbe29d792687e75ba5356c95e">approx_overlap_</a></td></tr>
<tr class="memdesc:a68e2113bbe29d792687e75ba5356c95e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Estimated overlap between source and target (standard = 0.5). <br /></td></tr>
<tr class="separator:a68e2113bbe29d792687e75ba5356c95e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a220d5b152bbde5a585be5d7f3228fe24"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a220d5b152bbde5a585be5d7f3228fe24">delta_</a></td></tr>
<tr class="memdesc:a220d5b152bbde5a585be5d7f3228fe24"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delta value of 4pcs algorithm (standard = 1.0). It can be used as:  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a220d5b152bbde5a585be5d7f3228fe24">更多...</a><br /></td></tr>
<tr class="separator:a220d5b152bbde5a585be5d7f3228fe24"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad781377604c1837191309b7e2d7f21be"><td class="memItemLeft" align="right" valign="top"><a id="ad781377604c1837191309b7e2d7f21be"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ad781377604c1837191309b7e2d7f21be">score_threshold_</a></td></tr>
<tr class="memdesc:ad781377604c1837191309b7e2d7f21be"><td class="mdescLeft">&#160;</td><td class="mdescRight">Score threshold to stop calculation with success. If not set by the user it is equal to the approximated overlap <br /></td></tr>
<tr class="separator:ad781377604c1837191309b7e2d7f21be"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a687508b1d693488cbf0d8d44fe88ad27"><td class="memItemLeft" align="right" valign="top"><a id="a687508b1d693488cbf0d8d44fe88ad27"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a687508b1d693488cbf0d8d44fe88ad27">nr_samples_</a></td></tr>
<tr class="memdesc:a687508b1d693488cbf0d8d44fe88ad27"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of points to uniformly sample the source point cloud. (standard = 0 =&gt; full cloud). <br /></td></tr>
<tr class="separator:a687508b1d693488cbf0d8d44fe88ad27"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a86d337480d265ecec717c579f9d31e0b"><td class="memItemLeft" align="right" valign="top"><a id="a86d337480d265ecec717c579f9d31e0b"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a86d337480d265ecec717c579f9d31e0b">max_norm_diff_</a></td></tr>
<tr class="memdesc:a86d337480d265ecec717c579f9d31e0b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum normal difference of corresponding point pairs in degrees (standard = 90). <br /></td></tr>
<tr class="separator:a86d337480d265ecec717c579f9d31e0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad40457d6fb0195815064f07bb391bdb8"><td class="memItemLeft" align="right" valign="top"><a id="ad40457d6fb0195815064f07bb391bdb8"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ad40457d6fb0195815064f07bb391bdb8">max_runtime_</a></td></tr>
<tr class="memdesc:ad40457d6fb0195815064f07bb391bdb8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum allowed computation time in seconds (standard = 0 =&gt; ~unlimited). <br /></td></tr>
<tr class="separator:ad40457d6fb0195815064f07bb391bdb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a93851bad9405a293cc58177956b77858"><td class="memItemLeft" align="right" valign="top"><a id="a93851bad9405a293cc58177956b77858"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a93851bad9405a293cc58177956b77858">fitness_score_</a></td></tr>
<tr class="memdesc:a93851bad9405a293cc58177956b77858"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resulting fitness score of the best match. <br /></td></tr>
<tr class="separator:a93851bad9405a293cc58177956b77858"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a956ffbdaf67cb8620b4d72a238b62e1c"><td class="memItemLeft" align="right" valign="top"><a id="a956ffbdaf67cb8620b4d72a238b62e1c"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a956ffbdaf67cb8620b4d72a238b62e1c">diameter_</a></td></tr>
<tr class="memdesc:a956ffbdaf67cb8620b4d72a238b62e1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Estimated diamter of the target point cloud. <br /></td></tr>
<tr class="separator:a956ffbdaf67cb8620b4d72a238b62e1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2861efeafe48b0000b9c3f40929a41af"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a2861efeafe48b0000b9c3f40929a41af">max_base_diameter_sqr_</a></td></tr>
<tr class="memdesc:a2861efeafe48b0000b9c3f40929a41af"><td class="mdescLeft">&#160;</td><td class="mdescRight">Estimated squared metric overlap between source and target.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a2861efeafe48b0000b9c3f40929a41af">更多...</a><br /></td></tr>
<tr class="separator:a2861efeafe48b0000b9c3f40929a41af"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a03fa1f6c89845ab017cf48c04c2b40f4"><td class="memItemLeft" align="right" valign="top"><a id="a03fa1f6c89845ab017cf48c04c2b40f4"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a03fa1f6c89845ab017cf48c04c2b40f4">use_normals_</a></td></tr>
<tr class="memdesc:a03fa1f6c89845ab017cf48c04c2b40f4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Use normals flag. <br /></td></tr>
<tr class="separator:a03fa1f6c89845ab017cf48c04c2b40f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4e4cdf295813f3638c368db57c94de36"><td class="memItemLeft" align="right" valign="top"><a id="a4e4cdf295813f3638c368db57c94de36"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a4e4cdf295813f3638c368db57c94de36">normalize_delta_</a></td></tr>
<tr class="memdesc:a4e4cdf295813f3638c368db57c94de36"><td class="mdescLeft">&#160;</td><td class="mdescRight">Normalize delta flag. <br /></td></tr>
<tr class="separator:a4e4cdf295813f3638c368db57c94de36"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6966b3505b739a38525a3aaeaeee99d9"><td class="memItemLeft" align="right" valign="top"><a id="a6966b3505b739a38525a3aaeaeee99d9"></a>
pcl::IndicesPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a6966b3505b739a38525a3aaeaeee99d9">source_indices_</a></td></tr>
<tr class="memdesc:a6966b3505b739a38525a3aaeaeee99d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pointer to the vector of source point indices to use after sampling. <br /></td></tr>
<tr class="separator:a6966b3505b739a38525a3aaeaeee99d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a59d3bd4a7820b1ae65edf07dc600518e"><td class="memItemLeft" align="right" valign="top"><a id="a59d3bd4a7820b1ae65edf07dc600518e"></a>
pcl::IndicesPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a59d3bd4a7820b1ae65edf07dc600518e">target_indices_</a></td></tr>
<tr class="memdesc:a59d3bd4a7820b1ae65edf07dc600518e"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pointer to the vector of target point indices to use after sampling. <br /></td></tr>
<tr class="separator:a59d3bd4a7820b1ae65edf07dc600518e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abb0c5e68f41b871eea5c4a0190801aa3"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#abb0c5e68f41b871eea5c4a0190801aa3">max_pair_diff_</a></td></tr>
<tr class="memdesc:abb0c5e68f41b871eea5c4a0190801aa3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximal difference between corresponding point pairs in source and target.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#abb0c5e68f41b871eea5c4a0190801aa3">更多...</a><br /></td></tr>
<tr class="separator:abb0c5e68f41b871eea5c4a0190801aa3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0fb2d738ed328e93f65073b0adb4ebbd"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a0fb2d738ed328e93f65073b0adb4ebbd">max_edge_diff_</a></td></tr>
<tr class="memdesc:a0fb2d738ed328e93f65073b0adb4ebbd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximal difference between the length of the base edges and valid match edges.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a0fb2d738ed328e93f65073b0adb4ebbd">更多...</a><br /></td></tr>
<tr class="separator:a0fb2d738ed328e93f65073b0adb4ebbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a29206ec46e704609c2dd41337e17407a"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a29206ec46e704609c2dd41337e17407a">coincidation_limit_</a></td></tr>
<tr class="memdesc:a29206ec46e704609c2dd41337e17407a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximal distance between coinciding intersection points to find valid matches.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a29206ec46e704609c2dd41337e17407a">更多...</a><br /></td></tr>
<tr class="separator:a29206ec46e704609c2dd41337e17407a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6828753c00b74ddbc3ffd58dd0028bef"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a6828753c00b74ddbc3ffd58dd0028bef">max_mse_</a></td></tr>
<tr class="memdesc:a6828753c00b74ddbc3ffd58dd0028bef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximal mean squared errors of a transformation calculated from a candidate match.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a6828753c00b74ddbc3ffd58dd0028bef">更多...</a><br /></td></tr>
<tr class="separator:a6828753c00b74ddbc3ffd58dd0028bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a47552016a1a2acb533c95fd43f8b6167"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a47552016a1a2acb533c95fd43f8b6167">max_inlier_dist_sqr_</a></td></tr>
<tr class="memdesc:a47552016a1a2acb533c95fd43f8b6167"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximal squared point distance between source and target points to count as inlier.  <a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a47552016a1a2acb533c95fd43f8b6167">更多...</a><br /></td></tr>
<tr class="separator:a47552016a1a2acb533c95fd43f8b6167"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac48c4fb7b4e3dbd410cc016129eb864a"><td class="memItemLeft" align="right" valign="top"><a id="ac48c4fb7b4e3dbd410cc016129eb864a"></a>
const float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac48c4fb7b4e3dbd410cc016129eb864a">small_error_</a></td></tr>
<tr class="memdesc:ac48c4fb7b4e3dbd410cc016129eb864a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Definition of a small error. <br /></td></tr>
<tr class="separator:ac48c4fb7b4e3dbd410cc016129eb864a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_classpcl_1_1_registration"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classpcl_1_1_registration')"><img src="closed.png" alt="-"/>&#160;Protected 属性 继承自 <a class="el" href="classpcl_1_1_registration.html">pcl::Registration&lt; PointSource, PointTarget, float &gt;</a></td></tr>
<tr class="memitem:a1e493af70763e05bcaf5ecd0ed7be63d inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a1e493af70763e05bcaf5ecd0ed7be63d"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a1e493af70763e05bcaf5ecd0ed7be63d">reg_name_</a></td></tr>
<tr class="memdesc:a1e493af70763e05bcaf5ecd0ed7be63d inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The registration method name. <br /></td></tr>
<tr class="separator:a1e493af70763e05bcaf5ecd0ed7be63d inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79b6170328705f29854aba00c4feb66d inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a79b6170328705f29854aba00c4feb66d"></a>
KdTreePtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a79b6170328705f29854aba00c4feb66d">tree_</a></td></tr>
<tr class="memdesc:a79b6170328705f29854aba00c4feb66d inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pointer to the spatial search object. <br /></td></tr>
<tr class="separator:a79b6170328705f29854aba00c4feb66d inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3362d946f4b60e2628dc02e2af1f24fd inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a3362d946f4b60e2628dc02e2af1f24fd"></a>
KdTreeReciprocalPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a3362d946f4b60e2628dc02e2af1f24fd">tree_reciprocal_</a></td></tr>
<tr class="memdesc:a3362d946f4b60e2628dc02e2af1f24fd inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pointer to the spatial search object of the source. <br /></td></tr>
<tr class="separator:a3362d946f4b60e2628dc02e2af1f24fd inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6957c3193d73098cb0535d6625d591d4 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a6957c3193d73098cb0535d6625d591d4"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a6957c3193d73098cb0535d6625d591d4">nr_iterations_</a></td></tr>
<tr class="memdesc:a6957c3193d73098cb0535d6625d591d4 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of iterations the internal optimization ran for (used internally). <br /></td></tr>
<tr class="separator:a6957c3193d73098cb0535d6625d591d4 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa776d097d20137f2702a275d931989d2 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="aa776d097d20137f2702a275d931989d2"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#aa776d097d20137f2702a275d931989d2">max_iterations_</a></td></tr>
<tr class="memdesc:aa776d097d20137f2702a275d931989d2 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum number of iterations the internal optimization should run for. The default value is 10. <br /></td></tr>
<tr class="separator:aa776d097d20137f2702a275d931989d2 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9099e6970624c4ee91817f3f97f82f7f inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a9099e6970624c4ee91817f3f97f82f7f"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a9099e6970624c4ee91817f3f97f82f7f">ransac_iterations_</a></td></tr>
<tr class="memdesc:a9099e6970624c4ee91817f3f97f82f7f inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of iterations RANSAC should run for. <br /></td></tr>
<tr class="separator:a9099e6970624c4ee91817f3f97f82f7f inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9ac08a379a3b5db44c5c502cf6a882e inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="af9ac08a379a3b5db44c5c502cf6a882e"></a>
PointCloudTargetConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a></td></tr>
<tr class="memdesc:af9ac08a379a3b5db44c5c502cf6a882e inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The input point cloud dataset target. <br /></td></tr>
<tr class="separator:af9ac08a379a3b5db44c5c502cf6a882e inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a023e79a041ee70e8383654432cf5a71e inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a023e79a041ee70e8383654432cf5a71e"></a>
Matrix4&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a023e79a041ee70e8383654432cf5a71e">final_transformation_</a></td></tr>
<tr class="memdesc:a023e79a041ee70e8383654432cf5a71e inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The final transformation matrix estimated by the registration method after N iterations. <br /></td></tr>
<tr class="separator:a023e79a041ee70e8383654432cf5a71e inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2cdeaab1c7d5e156a7bd35ee71c1f0db inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a2cdeaab1c7d5e156a7bd35ee71c1f0db"></a>
Matrix4&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a2cdeaab1c7d5e156a7bd35ee71c1f0db">transformation_</a></td></tr>
<tr class="memdesc:a2cdeaab1c7d5e156a7bd35ee71c1f0db inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The transformation matrix estimated by the registration method. <br /></td></tr>
<tr class="separator:a2cdeaab1c7d5e156a7bd35ee71c1f0db inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8d0064ba2f733ef07476f42de09a656f inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a8d0064ba2f733ef07476f42de09a656f"></a>
Matrix4&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a8d0064ba2f733ef07476f42de09a656f">previous_transformation_</a></td></tr>
<tr class="memdesc:a8d0064ba2f733ef07476f42de09a656f inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The previous transformation matrix estimated by the registration method (used internally). <br /></td></tr>
<tr class="separator:a8d0064ba2f733ef07476f42de09a656f inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adbd6519634f433c0be2fd640c0c75108 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="adbd6519634f433c0be2fd640c0c75108"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#adbd6519634f433c0be2fd640c0c75108">transformation_epsilon_</a></td></tr>
<tr class="memdesc:adbd6519634f433c0be2fd640c0c75108 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum difference between two consecutive transformations in order to consider convergence (user defined). <br /></td></tr>
<tr class="separator:adbd6519634f433c0be2fd640c0c75108 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab5bf2297e961c3012bffe79fdd2d495d inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ab5bf2297e961c3012bffe79fdd2d495d"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ab5bf2297e961c3012bffe79fdd2d495d">euclidean_fitness_epsilon_</a></td></tr>
<tr class="memdesc:ab5bf2297e961c3012bffe79fdd2d495d inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum allowed Euclidean error between two consecutive steps in the ICP loop, before the algorithm is considered to have converged. The error is estimated as the sum of the differences between correspondences in an Euclidean sense, divided by the number of correspondences. <br /></td></tr>
<tr class="separator:ab5bf2297e961c3012bffe79fdd2d495d inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15aa975f33a8f22573bad118ddda10dd inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a15aa975f33a8f22573bad118ddda10dd"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a15aa975f33a8f22573bad118ddda10dd">corr_dist_threshold_</a></td></tr>
<tr class="memdesc:a15aa975f33a8f22573bad118ddda10dd inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum distance threshold between two correspondent points in source &lt;-&gt; target. If the distance is larger than this threshold, the points will be ignored in the alignement process. <br /></td></tr>
<tr class="separator:a15aa975f33a8f22573bad118ddda10dd inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab5d7a9089d15932a78775dbb0b30d42f inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ab5d7a9089d15932a78775dbb0b30d42f"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ab5d7a9089d15932a78775dbb0b30d42f">inlier_threshold_</a></td></tr>
<tr class="memdesc:ab5d7a9089d15932a78775dbb0b30d42f inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The inlier distance threshold for the internal RANSAC outlier rejection loop. The method considers a point to be an inlier, if the distance between the target data index and the transformed source index is smaller than the given inlier distance threshold. The default value is 0.05. <br /></td></tr>
<tr class="separator:ab5d7a9089d15932a78775dbb0b30d42f inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e94793b677e107410ebb29ea2f931e9 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a8e94793b677e107410ebb29ea2f931e9"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a8e94793b677e107410ebb29ea2f931e9">converged_</a></td></tr>
<tr class="memdesc:a8e94793b677e107410ebb29ea2f931e9 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Holds internal convergence state, given user parameters. <br /></td></tr>
<tr class="separator:a8e94793b677e107410ebb29ea2f931e9 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae33bc2efe08f2fff1a35df1b3d602036 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ae33bc2efe08f2fff1a35df1b3d602036"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ae33bc2efe08f2fff1a35df1b3d602036">min_number_correspondences_</a></td></tr>
<tr class="memdesc:ae33bc2efe08f2fff1a35df1b3d602036 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The minimum number of correspondences that the algorithm needs before attempting to estimate the transformation. The default value is 3. <br /></td></tr>
<tr class="separator:ae33bc2efe08f2fff1a35df1b3d602036 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a98f1c160391fff07f34339b63286e228 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a98f1c160391fff07f34339b63286e228"></a>
CorrespondencesPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a98f1c160391fff07f34339b63286e228">correspondences_</a></td></tr>
<tr class="memdesc:a98f1c160391fff07f34339b63286e228 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The set of correspondences determined at this ICP step. <br /></td></tr>
<tr class="separator:a98f1c160391fff07f34339b63286e228 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a99baaa7e513bda9103c58fd1471557ed inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a99baaa7e513bda9103c58fd1471557ed"></a>
TransformationEstimationPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a99baaa7e513bda9103c58fd1471557ed">transformation_estimation_</a></td></tr>
<tr class="memdesc:a99baaa7e513bda9103c58fd1471557ed inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">A TransformationEstimation object, used to calculate the 4x4 rigid transformation. <br /></td></tr>
<tr class="separator:a99baaa7e513bda9103c58fd1471557ed inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f5e6122a988e5114f4caa1212920444 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a5f5e6122a988e5114f4caa1212920444"></a>
CorrespondenceEstimationPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a5f5e6122a988e5114f4caa1212920444">correspondence_estimation_</a></td></tr>
<tr class="memdesc:a5f5e6122a988e5114f4caa1212920444 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">A CorrespondenceEstimation object, used to estimate correspondences between the source and the target cloud. <br /></td></tr>
<tr class="separator:a5f5e6122a988e5114f4caa1212920444 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adc73c4731a1e01ac100ebf4659578e1c inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="adc73c4731a1e01ac100ebf4659578e1c"></a>
std::vector&lt; CorrespondenceRejectorPtr &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#adc73c4731a1e01ac100ebf4659578e1c">correspondence_rejectors_</a></td></tr>
<tr class="memdesc:adc73c4731a1e01ac100ebf4659578e1c inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The list of correspondence rejectors to use. <br /></td></tr>
<tr class="separator:adc73c4731a1e01ac100ebf4659578e1c inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0167493576dabedd7678aa6811dee363 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a0167493576dabedd7678aa6811dee363"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a0167493576dabedd7678aa6811dee363">target_cloud_updated_</a></td></tr>
<tr class="memdesc:a0167493576dabedd7678aa6811dee363 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Variable that stores whether we have a new target cloud, meaning we need to pre-process it again. This way, we avoid rebuilding the kd-tree for the target cloud every time the determineCorrespondences () method is called. <br /></td></tr>
<tr class="separator:a0167493576dabedd7678aa6811dee363 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aefd89f31379081d9cc75e3ce9ab1a947 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="aefd89f31379081d9cc75e3ce9ab1a947"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#aefd89f31379081d9cc75e3ce9ab1a947">source_cloud_updated_</a></td></tr>
<tr class="memdesc:aefd89f31379081d9cc75e3ce9ab1a947 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Variable that stores whether we have a new source cloud, meaning we need to pre-process it again. This way, we avoid rebuilding the reciprocal kd-tree for the source cloud every time the determineCorrespondences () method is called. <br /></td></tr>
<tr class="separator:aefd89f31379081d9cc75e3ce9ab1a947 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6335de3036d6e0fe9a3942cd6f30c87f inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a6335de3036d6e0fe9a3942cd6f30c87f"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a6335de3036d6e0fe9a3942cd6f30c87f">force_no_recompute_</a></td></tr>
<tr class="memdesc:a6335de3036d6e0fe9a3942cd6f30c87f inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">A flag which, if set, means the tree operating on the target cloud will never be recomputed <br /></td></tr>
<tr class="separator:a6335de3036d6e0fe9a3942cd6f30c87f inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad1fc63c91641a5e160aa19108a7811ec inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ad1fc63c91641a5e160aa19108a7811ec"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ad1fc63c91641a5e160aa19108a7811ec">force_no_recompute_reciprocal_</a></td></tr>
<tr class="memdesc:ad1fc63c91641a5e160aa19108a7811ec inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">A flag which, if set, means the tree operating on the source cloud will never be recomputed <br /></td></tr>
<tr class="separator:ad1fc63c91641a5e160aa19108a7811ec inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a010905bbc1bc67175d3ecf3b2ea6401a inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a010905bbc1bc67175d3ecf3b2ea6401a"></a>
boost::function&lt; void(const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointSource &gt; &amp;cloud_src, const std::vector&lt; int &gt; &amp;indices_src, const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointTarget &gt; &amp;cloud_tgt, const std::vector&lt; int &gt; &amp;indices_tgt)&gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a010905bbc1bc67175d3ecf3b2ea6401a">update_visualizer_</a></td></tr>
<tr class="memdesc:a010905bbc1bc67175d3ecf3b2ea6401a inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback function to update intermediate source point cloud position during it's registration to the target point cloud. <br /></td></tr>
<tr class="separator:a010905bbc1bc67175d3ecf3b2ea6401a inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Protected 属性 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointSource &gt;</a></td></tr>
<tr class="memitem:a09c70d8e06e3fb4f07903fe6f8d67869 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a09c70d8e06e3fb4f07903fe6f8d67869"></a>
PointCloudConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a></td></tr>
<tr class="memdesc:a09c70d8e06e3fb4f07903fe6f8d67869 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">The input point cloud dataset. <br /></td></tr>
<tr class="separator:a09c70d8e06e3fb4f07903fe6f8d67869 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaee847c8a517ebf365bad2cb182a6626 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="aaee847c8a517ebf365bad2cb182a6626"></a>
IndicesPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#aaee847c8a517ebf365bad2cb182a6626">indices_</a></td></tr>
<tr class="memdesc:aaee847c8a517ebf365bad2cb182a6626 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pointer to the vector of point indices to use. <br /></td></tr>
<tr class="separator:aaee847c8a517ebf365bad2cb182a6626 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ada1eadb824d34ca9206a86343d9760bb inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ada1eadb824d34ca9206a86343d9760bb"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#ada1eadb824d34ca9206a86343d9760bb">use_indices_</a></td></tr>
<tr class="memdesc:ada1eadb824d34ca9206a86343d9760bb inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set to true if point indices are used. <br /></td></tr>
<tr class="separator:ada1eadb824d34ca9206a86343d9760bb inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adadb0299f144528020ed558af6879662 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="adadb0299f144528020ed558af6879662"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#adadb0299f144528020ed558af6879662">fake_indices_</a></td></tr>
<tr class="memdesc:adadb0299f144528020ed558af6879662 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">If no set of indices are given, we construct a set of fake indices that mimic the input PointCloud. <br /></td></tr>
<tr class="separator:adadb0299f144528020ed558af6879662 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
额外继承的成员函数</h2></td></tr>
<tr class="inherit_header pub_types_classpcl_1_1_registration"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classpcl_1_1_registration')"><img src="closed.png" alt="-"/>&#160;Public 类型 继承自 <a class="el" href="classpcl_1_1_registration.html">pcl::Registration&lt; PointSource, PointTarget, float &gt;</a></td></tr>
<tr class="memitem:a1917aa6cebe00e615553655522e8f851 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a1917aa6cebe00e615553655522e8f851"></a>
typedef Eigen::Matrix&lt; float, 4, 4 &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>Matrix4</b></td></tr>
<tr class="separator:a1917aa6cebe00e615553655522e8f851 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a101ced9777ccf8ca067d2b6bb6d209d6 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a101ced9777ccf8ca067d2b6bb6d209d6"></a>
typedef boost::shared_ptr&lt; <a class="el" href="classpcl_1_1_registration.html">Registration</a>&lt; PointSource, PointTarget, float &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>Ptr</b></td></tr>
<tr class="separator:a101ced9777ccf8ca067d2b6bb6d209d6 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a30862684660b99ba01cdfbec4dfbc7e1 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a30862684660b99ba01cdfbec4dfbc7e1"></a>
typedef boost::shared_ptr&lt; const <a class="el" href="classpcl_1_1_registration.html">Registration</a>&lt; PointSource, PointTarget, float &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>ConstPtr</b></td></tr>
<tr class="separator:a30862684660b99ba01cdfbec4dfbc7e1 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac1e81ff894bb7e879ca821ade766ec16 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ac1e81ff894bb7e879ca821ade766ec16"></a>
typedef pcl::registration::CorrespondenceRejector::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>CorrespondenceRejectorPtr</b></td></tr>
<tr class="separator:ac1e81ff894bb7e879ca821ade766ec16 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae46cd2323712412e133e17f8863a5f03 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ae46cd2323712412e133e17f8863a5f03"></a>
typedef <a class="el" href="classpcl_1_1search_1_1_kd_tree.html">pcl::search::KdTree</a>&lt; PointTarget &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>KdTree</b></td></tr>
<tr class="separator:ae46cd2323712412e133e17f8863a5f03 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a06fce1e17a013422e5b04de4c1802562 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a06fce1e17a013422e5b04de4c1802562"></a>
typedef <a class="el" href="classpcl_1_1search_1_1_kd_tree.html">pcl::search::KdTree</a>&lt; PointTarget &gt;::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>KdTreePtr</b></td></tr>
<tr class="separator:a06fce1e17a013422e5b04de4c1802562 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa19c3b030967b37a754c81e4eee21283 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="aa19c3b030967b37a754c81e4eee21283"></a>
typedef <a class="el" href="classpcl_1_1search_1_1_kd_tree.html">pcl::search::KdTree</a>&lt; PointSource &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>KdTreeReciprocal</b></td></tr>
<tr class="separator:aa19c3b030967b37a754c81e4eee21283 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8f0f0491e3e0a1fe0afecb34b1751f7c inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a8f0f0491e3e0a1fe0afecb34b1751f7c"></a>
typedef KdTreeReciprocal::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>KdTreeReciprocalPtr</b></td></tr>
<tr class="separator:a8f0f0491e3e0a1fe0afecb34b1751f7c inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af0637a59a403120aa012d9fa68c1d492 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="af0637a59a403120aa012d9fa68c1d492"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointSource &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudSource</b></td></tr>
<tr class="separator:af0637a59a403120aa012d9fa68c1d492 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a294ef918cbe14cb3024033e8a7cb1f01 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a294ef918cbe14cb3024033e8a7cb1f01"></a>
typedef PointCloudSource::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudSourcePtr</b></td></tr>
<tr class="separator:a294ef918cbe14cb3024033e8a7cb1f01 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aae8517d707e8ef7d97e4a6d815f68796 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="aae8517d707e8ef7d97e4a6d815f68796"></a>
typedef PointCloudSource::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudSourceConstPtr</b></td></tr>
<tr class="separator:aae8517d707e8ef7d97e4a6d815f68796 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a024693ed432e3cd1c8341d8e2f15b094 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a024693ed432e3cd1c8341d8e2f15b094"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointTarget &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudTarget</b></td></tr>
<tr class="separator:a024693ed432e3cd1c8341d8e2f15b094 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad4bf5516a047e734bcb227d027871c11 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ad4bf5516a047e734bcb227d027871c11"></a>
typedef PointCloudTarget::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudTargetPtr</b></td></tr>
<tr class="separator:ad4bf5516a047e734bcb227d027871c11 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abf1fc7a0490db8d11553874b8d96c6c3 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="abf1fc7a0490db8d11553874b8d96c6c3"></a>
typedef PointCloudTarget::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudTargetConstPtr</b></td></tr>
<tr class="separator:abf1fc7a0490db8d11553874b8d96c6c3 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abffdcb0783ce57c28a906c244f56feb5 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="abffdcb0783ce57c28a906c244f56feb5"></a>
typedef KdTree::PointRepresentationConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointRepresentationConstPtr</b></td></tr>
<tr class="separator:abffdcb0783ce57c28a906c244f56feb5 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a202062f8fbf59254dbbe0d2810bac86b inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a202062f8fbf59254dbbe0d2810bac86b"></a>
typedef <a class="el" href="classpcl_1_1registration_1_1_transformation_estimation.html">pcl::registration::TransformationEstimation</a>&lt; PointSource, PointTarget, float &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>TransformationEstimation</b></td></tr>
<tr class="separator:a202062f8fbf59254dbbe0d2810bac86b inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a881e0a331909edae6a755a1595d0a4bf inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a881e0a331909edae6a755a1595d0a4bf"></a>
typedef TransformationEstimation::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>TransformationEstimationPtr</b></td></tr>
<tr class="separator:a881e0a331909edae6a755a1595d0a4bf inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a646ad11e179db2fc42cdf30e0cd30bf6 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a646ad11e179db2fc42cdf30e0cd30bf6"></a>
typedef TransformationEstimation::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>TransformationEstimationConstPtr</b></td></tr>
<tr class="separator:a646ad11e179db2fc42cdf30e0cd30bf6 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9ac2cc8f12fb04be29c9697cab749814 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a9ac2cc8f12fb04be29c9697cab749814"></a>
typedef <a class="el" href="classpcl_1_1registration_1_1_correspondence_estimation_base.html">pcl::registration::CorrespondenceEstimationBase</a>&lt; PointSource, PointTarget, float &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>CorrespondenceEstimation</b></td></tr>
<tr class="separator:a9ac2cc8f12fb04be29c9697cab749814 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1a0b7973990a95858e1640a1729137b9 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a1a0b7973990a95858e1640a1729137b9"></a>
typedef CorrespondenceEstimation::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>CorrespondenceEstimationPtr</b></td></tr>
<tr class="separator:a1a0b7973990a95858e1640a1729137b9 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab2ffc3aee341010bc07523c5e9dd507b inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ab2ffc3aee341010bc07523c5e9dd507b"></a>
typedef CorrespondenceEstimation::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>CorrespondenceEstimationConstPtr</b></td></tr>
<tr class="separator:ab2ffc3aee341010bc07523c5e9dd507b inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Public 类型 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointSource &gt;</a></td></tr>
<tr class="memitem:ae2f6f6863a73337858b7a7a054eaae4f inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ae2f6f6863a73337858b7a7a054eaae4f"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointSource &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloud</b></td></tr>
<tr class="separator:ae2f6f6863a73337858b7a7a054eaae4f inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab84dd662cda89edb882fe5307b2136ea inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ab84dd662cda89edb882fe5307b2136ea"></a>
typedef PointCloud::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudPtr</b></td></tr>
<tr class="separator:ab84dd662cda89edb882fe5307b2136ea inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac8326513fad0680b6993e2f1a79a6af4 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ac8326513fad0680b6993e2f1a79a6af4"></a>
typedef PointCloud::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudConstPtr</b></td></tr>
<tr class="separator:ac8326513fad0680b6993e2f1a79a6af4 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae51eae0c7b3e0b7178f4894dff90660a inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ae51eae0c7b3e0b7178f4894dff90660a"></a>
typedef boost::shared_ptr&lt; <a class="el" href="structpcl_1_1_point_indices.html">PointIndices</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointIndicesPtr</b></td></tr>
<tr class="separator:ae51eae0c7b3e0b7178f4894dff90660a inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a51771056fb4ab8c448a11157acbe2ee0 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a51771056fb4ab8c448a11157acbe2ee0"></a>
typedef boost::shared_ptr&lt; <a class="el" href="structpcl_1_1_point_indices.html">PointIndices</a> const &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointIndicesConstPtr</b></td></tr>
<tr class="separator:a51771056fb4ab8c448a11157acbe2ee0 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<div class="textblock"><h3>template&lt;typename PointSource, typename PointTarget, typename NormalT = pcl::Normal, typename Scalar = float&gt;<br />
class pcl::registration::FPCSInitialAlignment&lt; PointSource, PointTarget, NormalT, Scalar &gt;</h3>

<p><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html" title="FPCSInitialAlignment computes corresponding four point congruent sets as described in: &quot;4-points cong...">FPCSInitialAlignment</a> computes corresponding four point congruent sets as described in: "4-points congruent sets for robust pairwise surface registration", Dror Aiger, Niloy Mitra, Daniel Cohen-Or. ACM Transactions on Graphics, vol. 27(3), 2008 </p>
<dl class="section author"><dt>作者</dt><dd>P.W.Theiler </dd></dl>
</div><h2 class="groupheader">成员函数说明</h2>
<a id="a1392b97316249b70eddde0428ca317c9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1392b97316249b70eddde0428ca317c9">&#9670;&nbsp;</a></span>bruteForceCorrespondences()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::bruteForceCorrespondences </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>idx1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>idx2</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">pcl::Correspondences &amp;&#160;</td>
          <td class="paramname"><em>pairs</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Search for corresponding point pairs given the distance between two base points. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">idx1</td><td>first index of current base segment (in source cloud) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">idx2</td><td>second index of current base segment (in source cloud) </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">pairs</td><td>resulting point pairs with point-to-point distance close to ref_dist </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><ul>
<li>&lt; 0 no corresponding point pair was found</li>
<li>= 0 at least one point pair candidate was found </li>
</ul>
</dd></dl>
<div class="fragment"><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;{</div>
<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> max_norm_diff = 0.5f * <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a86d337480d265ecec717c579f9d31e0b">max_norm_diff_</a> * M_PI / 180.f;</div>
<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160; </div>
<div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;  <span class="comment">// calculate reference segment distance and normal angle</span></div>
<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;  <span class="keywordtype">float</span> ref_dist = <a class="code" href="common_2include_2pcl_2common_2distances_8h.html#a73e1d23717813eb053a0eb51411a4a23">pcl::euclideanDistance</a> (<a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[idx1], <a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[idx2]);</div>
<div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;  <span class="keywordtype">float</span> ref_norm_angle = (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a03fa1f6c89845ab017cf48c04c2b40f4">use_normals_</a> ? (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a584efd5f1587d8bbdca3b2c5de69b25d">target_normals_</a>-&gt;points[idx1].getNormalVector3fMap () -</div>
<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;                                          <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a584efd5f1587d8bbdca3b2c5de69b25d">target_normals_</a>-&gt;points[idx2].getNormalVector3fMap ()).norm () : 0.f);</div>
<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160; </div>
<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;  <span class="comment">// loop over all pairs of points in source point cloud</span></div>
<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;  std::vector &lt;int&gt;::iterator it_out = <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a6966b3505b739a38525a3aaeaeee99d9">source_indices_</a>-&gt;begin (), it_out_e = <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a6966b3505b739a38525a3aaeaeee99d9">source_indices_</a>-&gt;end () - 1;</div>
<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;  std::vector &lt;int&gt;::iterator it_in, it_in_e = <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a6966b3505b739a38525a3aaeaeee99d9">source_indices_</a>-&gt;end ();</div>
<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;  <span class="keywordflow">for</span> ( ; it_out != it_out_e; it_out++)</div>
<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;  {</div>
<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;    it_in = it_out + 1;</div>
<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;    <span class="keyword">const</span> PointSource *pt1 = &amp;(*input_)[*it_out];</div>
<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;    <span class="keywordflow">for</span> ( ; it_in != it_in_e; it_in++)</div>
<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;    {</div>
<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;      <span class="keyword">const</span> PointSource *pt2 = &amp;(*input_)[*it_in];</div>
<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160; </div>
<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;      <span class="comment">// check point distance compared to reference dist (from base)</span></div>
<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;      <span class="keywordtype">float</span> dist = <a class="code" href="common_2include_2pcl_2common_2distances_8h.html#a73e1d23717813eb053a0eb51411a4a23">pcl::euclideanDistance</a> (*pt1, *pt2);</div>
<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;      <span class="keywordflow">if</span> (std::abs(dist - ref_dist) &lt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#abb0c5e68f41b871eea5c4a0190801aa3">max_pair_diff_</a>)</div>
<div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;      {</div>
<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;        <span class="comment">// add here normal evaluation if normals are given</span></div>
<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a03fa1f6c89845ab017cf48c04c2b40f4">use_normals_</a>)</div>
<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;        {</div>
<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;          <span class="keyword">const</span> <a class="code" href="structpcl_1_1_normal.html">NormalT</a> *pt1_n = &amp;(<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a58a3035634e2177a521437b7242e7e5f">source_normals_</a>-&gt;points[*it_out]);</div>
<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;          <span class="keyword">const</span> <a class="code" href="structpcl_1_1_normal.html">NormalT</a> *pt2_n = &amp;(<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a58a3035634e2177a521437b7242e7e5f">source_normals_</a>-&gt;points[*it_in]);</div>
<div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160; </div>
<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;          <span class="keywordtype">float</span> norm_angle_1 = (pt1_n-&gt;getNormalVector3fMap () - pt2_n-&gt;getNormalVector3fMap ()).norm ();</div>
<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;          <span class="keywordtype">float</span> norm_angle_2 = (pt1_n-&gt;getNormalVector3fMap () + pt2_n-&gt;getNormalVector3fMap ()).norm ();</div>
<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160; </div>
<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;          <span class="keywordtype">float</span> norm_diff = std::min &lt;float&gt; (std::abs (norm_angle_1 - ref_norm_angle), std::abs (norm_angle_2 - ref_norm_angle));</div>
<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;          <span class="keywordflow">if</span> (norm_diff &gt; max_norm_diff)</div>
<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;            <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;        }</div>
<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160; </div>
<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;        pairs.push_back (<a class="code" href="structpcl_1_1_correspondence.html">pcl::Correspondence</a> (*it_in, *it_out, dist));</div>
<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;        pairs.push_back (<a class="code" href="structpcl_1_1_correspondence.html">pcl::Correspondence</a> (*it_out, *it_in, dist));</div>
<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;      }</div>
<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;    }</div>
<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;  }</div>
<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160; </div>
<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;  <span class="comment">// return success if at least one correspondence was found</span></div>
<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;  <span class="keywordflow">return</span> (pairs.size () == 0 ? -1 : 0);</div>
<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_registration_html_af9ac08a379a3b5db44c5c502cf6a882e"><div class="ttname"><a href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">pcl::Registration&lt; PointSource, PointTarget, float &gt;::target_</a></div><div class="ttdeci">PointCloudTargetConstPtr target_</div><div class="ttdoc">The input point cloud dataset target.</div><div class="ttdef"><b>Definition:</b> registration.h:502</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a03fa1f6c89845ab017cf48c04c2b40f4"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a03fa1f6c89845ab017cf48c04c2b40f4">pcl::registration::FPCSInitialAlignment::use_normals_</a></div><div class="ttdeci">bool use_normals_</div><div class="ttdoc">Use normals flag.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:523</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a584efd5f1587d8bbdca3b2c5de69b25d"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a584efd5f1587d8bbdca3b2c5de69b25d">pcl::registration::FPCSInitialAlignment::target_normals_</a></div><div class="ttdeci">NormalsConstPtr target_normals_</div><div class="ttdoc">Normals of target point cloud.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:475</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a58a3035634e2177a521437b7242e7e5f"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a58a3035634e2177a521437b7242e7e5f">pcl::registration::FPCSInitialAlignment::source_normals_</a></div><div class="ttdeci">NormalsConstPtr source_normals_</div><div class="ttdoc">Normals of source point cloud.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:472</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a6966b3505b739a38525a3aaeaeee99d9"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a6966b3505b739a38525a3aaeaeee99d9">pcl::registration::FPCSInitialAlignment::source_indices_</a></div><div class="ttdeci">pcl::IndicesPtr source_indices_</div><div class="ttdoc">A pointer to the vector of source point indices to use after sampling.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:530</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a86d337480d265ecec717c579f9d31e0b"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a86d337480d265ecec717c579f9d31e0b">pcl::registration::FPCSInitialAlignment::max_norm_diff_</a></div><div class="ttdeci">float max_norm_diff_</div><div class="ttdoc">Maximum normal difference of corresponding point pairs in degrees (standard = 90).</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:502</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_abb0c5e68f41b871eea5c4a0190801aa3"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#abb0c5e68f41b871eea5c4a0190801aa3">pcl::registration::FPCSInitialAlignment::max_pair_diff_</a></div><div class="ttdeci">float max_pair_diff_</div><div class="ttdoc">Maximal difference between corresponding point pairs in source and target.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:538</div></div>
<div class="ttc" id="acommon_2include_2pcl_2common_2distances_8h_html_a73e1d23717813eb053a0eb51411a4a23"><div class="ttname"><a href="common_2include_2pcl_2common_2distances_8h.html#a73e1d23717813eb053a0eb51411a4a23">pcl::euclideanDistance</a></div><div class="ttdeci">float euclideanDistance(const PointType1 &amp;p1, const PointType2 &amp;p2)</div><div class="ttdoc">Calculate the euclidean distance between the two given points.</div><div class="ttdef"><b>Definition:</b> distances.h:196</div></div>
<div class="ttc" id="astructpcl_1_1_correspondence_html"><div class="ttname"><a href="structpcl_1_1_correspondence.html">pcl::Correspondence</a></div><div class="ttdoc">Correspondence represents a match between two entities (e.g., points, descriptors,...</div><div class="ttdef"><b>Definition:</b> correspondence.h:59</div></div>
<div class="ttc" id="astructpcl_1_1_normal_html"><div class="ttname"><a href="structpcl_1_1_normal.html">pcl::Normal</a></div><div class="ttdoc">A point structure representing normal coordinates and the surface curvature estimate....</div><div class="ttdef"><b>Definition:</b> point_types.hpp:779</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ac6ccba63325f96f5e38fc065b0897ea3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac6ccba63325f96f5e38fc065b0897ea3">&#9670;&nbsp;</a></span>checkBaseMatch()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::checkBaseMatch </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>match_indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const float(&amp;)&#160;</td>
          <td class="paramname"><em>ds</em>[4]&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Check if outer rectangle distance of matched points fit with the base rectangle. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">match_indices</td><td>indices of match M </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ds</td><td>edge lengths of base B </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><ul>
<li>&lt; 0 at least one edge of the match M has no corresponding one in the base B</li>
<li>= 0 edges of match M fits to the ones of base B </li>
</ul>
</dd></dl>
<div class="fragment"><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;{</div>
<div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;  <span class="keywordtype">float</span> d0 = <a class="code" href="common_2include_2pcl_2common_2distances_8h.html#a73e1d23717813eb053a0eb51411a4a23">pcl::euclideanDistance</a> (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[match_indices[0]], <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[match_indices[2]]);</div>
<div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;  <span class="keywordtype">float</span> d1 = <a class="code" href="common_2include_2pcl_2common_2distances_8h.html#a73e1d23717813eb053a0eb51411a4a23">pcl::euclideanDistance</a> (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[match_indices[0]], <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[match_indices[3]]);</div>
<div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;  <span class="keywordtype">float</span> d2 = <a class="code" href="common_2include_2pcl_2common_2distances_8h.html#a73e1d23717813eb053a0eb51411a4a23">pcl::euclideanDistance</a> (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[match_indices[1]], <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[match_indices[2]]);</div>
<div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;  <span class="keywordtype">float</span> d3 = <a class="code" href="common_2include_2pcl_2common_2distances_8h.html#a73e1d23717813eb053a0eb51411a4a23">pcl::euclideanDistance</a> (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[match_indices[1]], <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[match_indices[3]]);</div>
<div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160; </div>
<div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;  <span class="comment">// check edge distances of match w.r.t the base</span></div>
<div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;  <span class="keywordflow">return</span> (std::abs (d0 - dist_ref[0]) &lt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a0fb2d738ed328e93f65073b0adb4ebbd">max_edge_diff_</a> &amp;&amp; std::abs (d1 - dist_ref[1]) &lt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a0fb2d738ed328e93f65073b0adb4ebbd">max_edge_diff_</a> &amp;&amp;</div>
<div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;          std::abs (d2 - dist_ref[2]) &lt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a0fb2d738ed328e93f65073b0adb4ebbd">max_edge_diff_</a> &amp;&amp; std::abs (d3 - dist_ref[3]) &lt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a0fb2d738ed328e93f65073b0adb4ebbd">max_edge_diff_</a>) ? 0 : -1;</div>
<div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_p_c_l_base_html_a09c70d8e06e3fb4f07903fe6f8d67869"><div class="ttname"><a href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">pcl::PCLBase&lt; PointSource &gt;::input_</a></div><div class="ttdeci">PointCloudConstPtr input_</div><div class="ttdoc">The input point cloud dataset.</div><div class="ttdef"><b>Definition:</b> pcl_base.h:150</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a0fb2d738ed328e93f65073b0adb4ebbd"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a0fb2d738ed328e93f65073b0adb4ebbd">pcl::registration::FPCSInitialAlignment::max_edge_diff_</a></div><div class="ttdeci">float max_edge_diff_</div><div class="ttdoc">Maximal difference between the length of the base edges and valid match edges.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:543</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ab2c4309ae91b6c3bc6f5480cad22ec67"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab2c4309ae91b6c3bc6f5480cad22ec67">&#9670;&nbsp;</a></span>computeTransformation()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::computeTransformation </td>
          <td>(</td>
          <td class="paramtype">PointCloudSource &amp;&#160;</td>
          <td class="paramname"><em>output</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix4f &amp;&#160;</td>
          <td class="paramname"><em>guess</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Rigid transformation computation method. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">output</td><td>the transformed input point cloud dataset using the rigid transformation found </td></tr>
    <tr><td class="paramname">guess</td><td>The computed transforamtion </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;{</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#af9a399e9cc72e413f9ce769ce4896e10">initCompute</a> ())</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160; </div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;  <a class="code" href="classpcl_1_1_registration.html#a023e79a041ee70e8383654432cf5a71e">final_transformation_</a> = guess;</div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;  <span class="keywordtype">bool</span> abort = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;  std::vector &lt;MatchingCandidates&gt; all_candidates (<a class="code" href="classpcl_1_1_registration.html#aa776d097d20137f2702a275d931989d2">max_iterations_</a>);</div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;  <a class="code" href="classpcl_1_1_stop_watch.html">pcl::StopWatch</a> timer;</div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160; </div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;<span class="preprocessor">  #ifdef _OPENMP</span></div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;<span class="preprocessor">  #pragma omp parallel num_threads (nr_threads_)</span></div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="preprocessor">  #endif</span></div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;  {</div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;<span class="preprocessor">    #ifdef _OPENMP</span></div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    std::srand (<span class="keyword">static_cast &lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (std::time (NULL)) ^ omp_get_thread_num ());    </div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<span class="preprocessor">    #pragma omp for schedule (dynamic)</span></div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;<span class="preprocessor">    #endif</span></div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classpcl_1_1_registration.html#aa776d097d20137f2702a275d931989d2">max_iterations_</a>; i++)</div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    {</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160; </div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;<span class="preprocessor">      #ifdef _OPENMP</span></div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;<span class="preprocessor">      #pragma omp flush (abort)</span></div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;<span class="preprocessor">      #endif</span></div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160; </div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;      MatchingCandidates candidates (1);</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;      std::vector &lt;int&gt; base_indices (4);</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;      <span class="keywordtype">float</span> ratio[2];</div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;      all_candidates[i] = candidates;</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160; </div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;      <span class="keywordflow">if</span> (!abort)</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;      {</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;        <span class="comment">// select four coplanar point base</span></div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac34b9f119a6d69a1b7a646bdb8e8dace">selectBase</a> (base_indices, ratio) == 0)</div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        {</div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;          <span class="comment">// calculate candidate pair correspondences using diagonal lenghts of base</span></div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;          pcl::Correspondences pairs_a, pairs_b;</div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;          <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a1392b97316249b70eddde0428ca317c9">bruteForceCorrespondences</a> (base_indices[0], base_indices[1], pairs_a) == 0 &amp;&amp;</div>
<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;            <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a1392b97316249b70eddde0428ca317c9">bruteForceCorrespondences</a> (base_indices[2], base_indices[3], pairs_b) == 0)</div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;          {</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;            <span class="comment">// determine candidate matches by combining pair correspondences based on segment distances</span></div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;            std::vector &lt;std::vector &lt;int&gt; &gt; matches;</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a37b21d4669718973b6ab1aa8936a1704">determineBaseMatches</a> (base_indices, matches, pairs_a, pairs_b, ratio) == 0)</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;            {</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;              <span class="comment">// check and evaluate candidate matches and store them</span></div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;              <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a0d59c76f9a58f59caf2b63e377aca6bb">handleMatches</a> (base_indices, matches, candidates);</div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;              <span class="keywordflow">if</span> (candidates.size () != 0)</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;                all_candidates[i] = candidates;</div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;            }</div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;          }</div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;        }</div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160; </div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;        <span class="comment">// check terminate early (time or fitness_score threshold reached)</span></div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;        abort = (candidates.size () &gt; 0 ? candidates[0].fitness_score &lt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ad781377604c1837191309b7e2d7f21be">score_threshold_</a> : abort);</div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;        abort = (abort ? abort : timer.<a class="code" href="classpcl_1_1_stop_watch.html#a13f07f01df8ea1feb8d7d5fe3a0d22eb">getTimeSeconds</a> () &gt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ad40457d6fb0195815064f07bb391bdb8">max_runtime_</a>);</div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160; </div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160; </div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;<span class="preprocessor">        #ifdef _OPENMP</span></div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;<span class="preprocessor">        #pragma omp flush (abort)</span></div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;<span class="preprocessor">        #endif</span></div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;      }</div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;    }</div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;  }</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;  </div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160; </div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;  <span class="comment">// determine best match over all trys</span></div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;  <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a0182f309b73f20835d5ca7356fa167dc">finalCompute</a> (all_candidates);</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160; </div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;  <span class="comment">// apply the final transformation</span></div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;  <a class="code" href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">pcl::transformPointCloud</a> (*<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>, output, <a class="code" href="classpcl_1_1_registration.html#a023e79a041ee70e8383654432cf5a71e">final_transformation_</a>);</div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160; </div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;  <a class="code" href="classpcl_1_1_p_c_l_base.html#afc426c4eebb94b7734d4fa556bff1420">deinitCompute</a> ();</div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_p_c_l_base_html_afc426c4eebb94b7734d4fa556bff1420"><div class="ttname"><a href="classpcl_1_1_p_c_l_base.html#afc426c4eebb94b7734d4fa556bff1420">pcl::PCLBase&lt; PointSource &gt;::deinitCompute</a></div><div class="ttdeci">bool deinitCompute()</div><div class="ttdoc">This method should get called after finishing the actual computation.</div><div class="ttdef"><b>Definition:</b> pcl_base.hpp:174</div></div>
<div class="ttc" id="aclasspcl_1_1_registration_html_a023e79a041ee70e8383654432cf5a71e"><div class="ttname"><a href="classpcl_1_1_registration.html#a023e79a041ee70e8383654432cf5a71e">pcl::Registration&lt; PointSource, PointTarget, float &gt;::final_transformation_</a></div><div class="ttdeci">Matrix4 final_transformation_</div><div class="ttdoc">The final transformation matrix estimated by the registration method after N iterations.</div><div class="ttdef"><b>Definition:</b> registration.h:505</div></div>
<div class="ttc" id="aclasspcl_1_1_registration_html_aa776d097d20137f2702a275d931989d2"><div class="ttname"><a href="classpcl_1_1_registration.html#aa776d097d20137f2702a275d931989d2">pcl::Registration&lt; PointSource, PointTarget, float &gt;::max_iterations_</a></div><div class="ttdeci">int max_iterations_</div><div class="ttdoc">The maximum number of iterations the internal optimization should run for. The default value is 10.</div><div class="ttdef"><b>Definition:</b> registration.h:496</div></div>
<div class="ttc" id="aclasspcl_1_1_stop_watch_html"><div class="ttname"><a href="classpcl_1_1_stop_watch.html">pcl::StopWatch</a></div><div class="ttdoc">Simple stopwatch.</div><div class="ttdef"><b>Definition:</b> time.h:66</div></div>
<div class="ttc" id="aclasspcl_1_1_stop_watch_html_a13f07f01df8ea1feb8d7d5fe3a0d22eb"><div class="ttname"><a href="classpcl_1_1_stop_watch.html#a13f07f01df8ea1feb8d7d5fe3a0d22eb">pcl::StopWatch::getTimeSeconds</a></div><div class="ttdeci">double getTimeSeconds()</div><div class="ttdoc">Retrieve the time in seconds spent since the last call to reset().</div><div class="ttdef"><b>Definition:</b> time.h:86</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a0182f309b73f20835d5ca7356fa167dc"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a0182f309b73f20835d5ca7356fa167dc">pcl::registration::FPCSInitialAlignment::finalCompute</a></div><div class="ttdeci">virtual void finalCompute(const std::vector&lt; MatchingCandidates &gt; &amp;candidates)</div><div class="ttdoc">Final computation of best match out of vector of best matches. To avoid cross thread dependencies dur...</div><div class="ttdef"><b>Definition:</b> ia_fpcs.hpp:885</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a0d59c76f9a58f59caf2b63e377aca6bb"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a0d59c76f9a58f59caf2b63e377aca6bb">pcl::registration::FPCSInitialAlignment::handleMatches</a></div><div class="ttdeci">virtual void handleMatches(const std::vector&lt; int &gt; &amp;base_indices, std::vector&lt; std::vector&lt; int &gt; &gt; &amp;matches, MatchingCandidates &amp;candidates)</div><div class="ttdoc">Method to handle current candidate matches. Here we validate and evaluate the matches w....</div><div class="ttdef"><b>Definition:</b> ia_fpcs.hpp:724</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a1392b97316249b70eddde0428ca317c9"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a1392b97316249b70eddde0428ca317c9">pcl::registration::FPCSInitialAlignment::bruteForceCorrespondences</a></div><div class="ttdeci">virtual int bruteForceCorrespondences(int idx1, int idx2, pcl::Correspondences &amp;pairs)</div><div class="ttdoc">Search for corresponding point pairs given the distance between two base points.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.hpp:573</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a37b21d4669718973b6ab1aa8936a1704"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a37b21d4669718973b6ab1aa8936a1704">pcl::registration::FPCSInitialAlignment::determineBaseMatches</a></div><div class="ttdeci">virtual int determineBaseMatches(const std::vector&lt; int &gt; &amp;base_indices, std::vector&lt; std::vector&lt; int &gt; &gt; &amp;matches, const pcl::Correspondences &amp;pairs_a, const pcl::Correspondences &amp;pairs_b, const float(&amp;ratio)[2])</div><div class="ttdoc">Determine base matches by combining the point pair candidate and search for coinciding intersection p...</div><div class="ttdef"><b>Definition:</b> ia_fpcs.hpp:627</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_ac34b9f119a6d69a1b7a646bdb8e8dace"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac34b9f119a6d69a1b7a646bdb8e8dace">pcl::registration::FPCSInitialAlignment::selectBase</a></div><div class="ttdeci">int selectBase(std::vector&lt; int &gt; &amp;base_indices, float(&amp;ratio)[2])</div><div class="ttdoc">Select an approximately coplanar set of four points from the source cloud.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.hpp:334</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_ad40457d6fb0195815064f07bb391bdb8"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ad40457d6fb0195815064f07bb391bdb8">pcl::registration::FPCSInitialAlignment::max_runtime_</a></div><div class="ttdeci">int max_runtime_</div><div class="ttdoc">Maximum allowed computation time in seconds (standard = 0 =&gt; ~unlimited).</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:505</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_ad781377604c1837191309b7e2d7f21be"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ad781377604c1837191309b7e2d7f21be">pcl::registration::FPCSInitialAlignment::score_threshold_</a></div><div class="ttdeci">float score_threshold_</div><div class="ttdoc">Score threshold to stop calculation with success. If not set by the user it is equal to the approxima...</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:496</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_af9a399e9cc72e413f9ce769ce4896e10"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#af9a399e9cc72e413f9ce769ce4896e10">pcl::registration::FPCSInitialAlignment::initCompute</a></div><div class="ttdeci">virtual bool initCompute()</div><div class="ttdoc">Internal computation initialization.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.hpp:232</div></div>
<div class="ttc" id="agroup__common_html_ga52d532f7f2b4d7bba78d13701d3a33d8"><div class="ttname"><a href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">pcl::transformPointCloud</a></div><div class="ttdeci">void transformPointCloud(const pcl::PointCloud&lt; PointT &gt; &amp;cloud_in, pcl::PointCloud&lt; PointT &gt; &amp;cloud_out, const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;transform, bool copy_all_fields=true)</div><div class="ttdoc">Apply an affine transform defined by an Eigen Transform</div><div class="ttdef"><b>Definition:</b> transforms.hpp:42</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a37b21d4669718973b6ab1aa8936a1704"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a37b21d4669718973b6ab1aa8936a1704">&#9670;&nbsp;</a></span>determineBaseMatches()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::determineBaseMatches </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>base_indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; std::vector&lt; int &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>matches</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const pcl::Correspondences &amp;&#160;</td>
          <td class="paramname"><em>pairs_a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const pcl::Correspondences &amp;&#160;</td>
          <td class="paramname"><em>pairs_b</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const float(&amp;)&#160;</td>
          <td class="paramname"><em>ratio</em>[2]&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Determine base matches by combining the point pair candidate and search for coinciding intersection points using the diagonal segment ratios of base B. The coincidation threshold is calculated during initialization (coincidation_limit_). </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">base_indices</td><td>indices of base B </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">matches</td><td>vector of candidate matches w.r.t the base B </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pairs_a</td><td>point pairs corresponding to points of 1st diagonal of base B </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pairs_b</td><td>point pairs corresponding to points of 2nd diagonal of base B </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ratio</td><td>diagonal intersection ratios of base points </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><ul>
<li>&lt; 0 no base match could be found</li>
<li>= 0 at least one base match was found </li>
</ul>
</dd></dl>
<div class="fragment"><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;{</div>
<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;  <span class="comment">// calculate edge lengths of base</span></div>
<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;  <span class="keywordtype">float</span> dist_base[4];</div>
<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;  dist_base[0] = <a class="code" href="common_2include_2pcl_2common_2distances_8h.html#a73e1d23717813eb053a0eb51411a4a23">pcl::euclideanDistance</a> (<a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[base_indices[0]], <a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[base_indices[2]]);</div>
<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;  dist_base[1] = <a class="code" href="common_2include_2pcl_2common_2distances_8h.html#a73e1d23717813eb053a0eb51411a4a23">pcl::euclideanDistance</a> (<a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[base_indices[0]], <a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[base_indices[3]]);</div>
<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;  dist_base[2] = <a class="code" href="common_2include_2pcl_2common_2distances_8h.html#a73e1d23717813eb053a0eb51411a4a23">pcl::euclideanDistance</a> (<a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[base_indices[1]], <a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[base_indices[2]]);</div>
<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;  dist_base[3] = <a class="code" href="common_2include_2pcl_2common_2distances_8h.html#a73e1d23717813eb053a0eb51411a4a23">pcl::euclideanDistance</a> (<a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[base_indices[1]], <a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[base_indices[3]]);</div>
<div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160; </div>
<div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;  <span class="comment">// loop over first point pair correspondences and store intermediate points &#39;e&#39; in new point cloud</span></div>
<div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;  PointCloudSourcePtr cloud_e (<span class="keyword">new</span> PointCloudSource);</div>
<div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;  cloud_e-&gt;resize (pairs_a.size () * 2);</div>
<div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;  PointCloudSourceIterator it_pt = cloud_e-&gt;begin ();</div>
<div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;  <span class="keywordflow">for</span> (pcl::Correspondences::const_iterator it_pair = pairs_a.begin (), it_pair_e = pairs_a.end () ; it_pair != it_pair_e; it_pair++)</div>
<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;  {</div>
<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;    <span class="keyword">const</span> PointSource *pt1 = &amp;(<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[it_pair-&gt;index_match]);</div>
<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    <span class="keyword">const</span> PointSource *pt2 = &amp;(<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[it_pair-&gt;index_query]);</div>
<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160; </div>
<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    <span class="comment">// calculate intermediate points using both ratios from base (r1,r2)</span></div>
<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 2; i++, it_pt++)</div>
<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;    {</div>
<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;      it_pt-&gt;x = pt1-&gt;x + ratio[i] * (pt2-&gt;x - pt1-&gt;x);</div>
<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;      it_pt-&gt;y = pt1-&gt;y + ratio[i] * (pt2-&gt;y - pt1-&gt;y);</div>
<div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;      it_pt-&gt;z = pt1-&gt;z + ratio[i] * (pt2-&gt;z - pt1-&gt;z);</div>
<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;    }</div>
<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;  }</div>
<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160; </div>
<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;  <span class="comment">// initialize new kd tree of intermediate points from first point pair correspondences</span></div>
<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;  KdTreeReciprocalPtr tree_e (<span class="keyword">new</span> KdTreeReciprocal);</div>
<div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;  tree_e-&gt;setInputCloud (cloud_e);</div>
<div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160; </div>
<div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;  std::vector &lt;int&gt; ids;</div>
<div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;  std::vector &lt;float&gt; dists_sqr;</div>
<div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160; </div>
<div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;  <span class="comment">// loop over second point pair correspondences</span></div>
<div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;  <span class="keywordflow">for</span> (pcl::Correspondences::const_iterator it_pair = pairs_b.begin (), it_pair_e = pairs_b.end () ; it_pair != it_pair_e; it_pair++)</div>
<div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;  {</div>
<div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;    <span class="keyword">const</span> PointTarget *pt1 = &amp;(<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[it_pair-&gt;index_match]);</div>
<div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;    <span class="keyword">const</span> PointTarget *pt2 = &amp;(<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[it_pair-&gt;index_query]);</div>
<div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160; </div>
<div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;    <span class="comment">// calculate intermediate points using both ratios from base (r1,r2)</span></div>
<div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 2; i++)</div>
<div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;    {</div>
<div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;      PointTarget pt_e;</div>
<div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;      pt_e.x = pt1-&gt;x + ratio[i] * (pt2-&gt;x - pt1-&gt;x);</div>
<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;      pt_e.y = pt1-&gt;y + ratio[i] * (pt2-&gt;y - pt1-&gt;y);</div>
<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;      pt_e.z = pt1-&gt;z + ratio[i] * (pt2-&gt;z - pt1-&gt;z);</div>
<div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160; </div>
<div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;      <span class="comment">// search for corresponding intermediate points</span></div>
<div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;      tree_e-&gt;radiusSearch (pt_e, <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a29206ec46e704609c2dd41337e17407a">coincidation_limit_</a>, ids, dists_sqr);</div>
<div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;      <span class="keywordflow">for</span> (std::vector &lt;int&gt;::iterator it = ids.begin (), it_e = ids.end (); it != it_e; it++)</div>
<div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;      {</div>
<div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;        std::vector &lt;int&gt; match_indices (4);</div>
<div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160; </div>
<div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;        match_indices[0] = pairs_a[<span class="keyword">static_cast &lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (std::floor ((<span class="keywordtype">float</span>)(*it/2.f)))].index_match;</div>
<div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;        match_indices[1] = pairs_a[<span class="keyword">static_cast &lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (std::floor ((<span class="keywordtype">float</span>)(*it/2.f)))].index_query;</div>
<div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;        match_indices[2] = it_pair-&gt;index_match;</div>
<div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;        match_indices[3] = it_pair-&gt;index_query;</div>
<div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160; </div>
<div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;        <span class="comment">// EDITED: added coarse check of match based on edge length (due to rigid-body )</span></div>
<div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac6ccba63325f96f5e38fc065b0897ea3">checkBaseMatch</a> (match_indices, dist_base) &lt; 0)</div>
<div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;          <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160; </div>
<div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;        matches.push_back (match_indices);</div>
<div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;      }</div>
<div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;    }</div>
<div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;  }</div>
<div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160; </div>
<div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;  <span class="comment">// return unsuccessfull if no match was found</span></div>
<div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;  <span class="keywordflow">return</span> (matches.size () &gt; 0 ? 0 : -1);</div>
<div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a29206ec46e704609c2dd41337e17407a"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a29206ec46e704609c2dd41337e17407a">pcl::registration::FPCSInitialAlignment::coincidation_limit_</a></div><div class="ttdeci">float coincidation_limit_</div><div class="ttdoc">Maximal distance between coinciding intersection points to find valid matches.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:548</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_ac6ccba63325f96f5e38fc065b0897ea3"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac6ccba63325f96f5e38fc065b0897ea3">pcl::registration::FPCSInitialAlignment::checkBaseMatch</a></div><div class="ttdeci">int checkBaseMatch(const std::vector&lt; int &gt; &amp;match_indices, const float(&amp;ds)[4])</div><div class="ttdoc">Check if outer rectangle distance of matched points fit with the base rectangle.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.hpp:707</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a0182f309b73f20835d5ca7356fa167dc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0182f309b73f20835d5ca7356fa167dc">&#9670;&nbsp;</a></span>finalCompute()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::finalCompute </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; MatchingCandidates &gt; &amp;&#160;</td>
          <td class="paramname"><em>candidates</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Final computation of best match out of vector of best matches. To avoid cross thread dependencies during parallel running, a best match for each try was calculated. </p>
<dl class="section note"><dt>注解</dt><dd>For forwards compatibility the candidates are stored in vectors of 'vectors of size 1'. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">candidates</td><td>vector of candidate matches </td></tr>
  </table>
  </dd>
</dl>

<p>被 <a class="el" href="classpcl_1_1registration_1_1_k_f_p_c_s_initial_alignment.html#a98455cda12d8fcef925171ff11ca25d1">pcl::registration::KFPCSInitialAlignment&lt; PointSource, PointTarget, NormalT, Scalar &gt;</a> 重载.</p>
<div class="fragment"><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;{</div>
<div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;  <span class="comment">// get best fitness_score over all trys</span></div>
<div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;  <span class="keywordtype">int</span> nr_candidates = <span class="keyword">static_cast &lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (candidates.size ());</div>
<div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;  <span class="keywordtype">int</span> best_index = -1;</div>
<div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;  <span class="keywordtype">float</span> best_score = FLT_MAX;</div>
<div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; nr_candidates; i++)</div>
<div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;  {</div>
<div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> &amp;fitness_score = candidates [i][0].fitness_score;</div>
<div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;    <span class="keywordflow">if</span> (fitness_score &lt; best_score)</div>
<div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;    {</div>
<div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;      best_score = fitness_score;</div>
<div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;      best_index = i;</div>
<div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;    }</div>
<div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;  }</div>
<div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160; </div>
<div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;  <span class="comment">// check if a valid candidate was available</span></div>
<div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;  <span class="keywordflow">if</span> (!(best_index &lt; 0))</div>
<div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;  {</div>
<div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;    <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a93851bad9405a293cc58177956b77858">fitness_score_</a> = candidates [best_index][0].fitness_score;</div>
<div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;    <a class="code" href="classpcl_1_1_registration.html#a023e79a041ee70e8383654432cf5a71e">final_transformation_</a> = candidates [best_index][0].transformation;</div>
<div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;    *<a class="code" href="classpcl_1_1_registration.html#a98f1c160391fff07f34339b63286e228">correspondences_</a> = candidates [best_index][0].correspondences;</div>
<div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160; </div>
<div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;    <span class="comment">// here we define convergence if resulting fitness_score is below 1-threshold</span></div>
<div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;    <a class="code" href="classpcl_1_1_registration.html#a8e94793b677e107410ebb29ea2f931e9">converged_</a> = <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a93851bad9405a293cc58177956b77858">fitness_score_</a> &lt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ad781377604c1837191309b7e2d7f21be">score_threshold_</a>;</div>
<div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;  }</div>
<div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_registration_html_a8e94793b677e107410ebb29ea2f931e9"><div class="ttname"><a href="classpcl_1_1_registration.html#a8e94793b677e107410ebb29ea2f931e9">pcl::Registration&lt; PointSource, PointTarget, float &gt;::converged_</a></div><div class="ttdeci">bool converged_</div><div class="ttdoc">Holds internal convergence state, given user parameters.</div><div class="ttdef"><b>Definition:</b> registration.h:536</div></div>
<div class="ttc" id="aclasspcl_1_1_registration_html_a98f1c160391fff07f34339b63286e228"><div class="ttname"><a href="classpcl_1_1_registration.html#a98f1c160391fff07f34339b63286e228">pcl::Registration&lt; PointSource, PointTarget, float &gt;::correspondences_</a></div><div class="ttdeci">CorrespondencesPtr correspondences_</div><div class="ttdoc">The set of correspondences determined at this ICP step.</div><div class="ttdef"><b>Definition:</b> registration.h:544</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a93851bad9405a293cc58177956b77858"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a93851bad9405a293cc58177956b77858">pcl::registration::FPCSInitialAlignment::fitness_score_</a></div><div class="ttdeci">float fitness_score_</div><div class="ttdoc">Resulting fitness score of the best match.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:509</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ab96ec3601da6099b68eaf6f717d065c8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab96ec3601da6099b68eaf6f717d065c8">&#9670;&nbsp;</a></span>getApproxOverlap()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::getApproxOverlap </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>返回</dt><dd>the approximated overlap between source and target. </dd></dl>
<div class="fragment"><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;      {</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a68e2113bbe29d792687e75ba5356c95e">approx_overlap_</a>);</div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;      };</div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a68e2113bbe29d792687e75ba5356c95e"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a68e2113bbe29d792687e75ba5356c95e">pcl::registration::FPCSInitialAlignment::approx_overlap_</a></div><div class="ttdeci">float approx_overlap_</div><div class="ttdoc">Estimated overlap between source and target (standard = 0.5).</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:484</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ab36ed0e1cc87ec8a08ae2f0bb98025ae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab36ed0e1cc87ec8a08ae2f0bb98025ae">&#9670;&nbsp;</a></span>getDelta()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::getDelta </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>返回</dt><dd>the constant factor delta which weights the internally calculated parameters. </dd></dl>
<div class="fragment"><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;      {</div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a220d5b152bbde5a585be5d7f3228fe24">delta_</a>);</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;      };</div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a220d5b152bbde5a585be5d7f3228fe24"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a220d5b152bbde5a585be5d7f3228fe24">pcl::registration::FPCSInitialAlignment::delta_</a></div><div class="ttdeci">float delta_</div><div class="ttdoc">Delta value of 4pcs algorithm (standard = 1.0). It can be used as:</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:491</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a40426ed25237b5919e3a4697a81a8da6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a40426ed25237b5919e3a4697a81a8da6">&#9670;&nbsp;</a></span>getFitnessScore()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::getFitnessScore </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>返回</dt><dd>the fitness score of the best scored four-point match. </dd></dl>
<div class="fragment"><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;      {</div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a93851bad9405a293cc58177956b77858">fitness_score_</a>);</div>
<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;      };</div>
</div><!-- fragment -->
</div>
</div>
<a id="a8db91266814752951a372d4e5e54dab2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8db91266814752951a372d4e5e54dab2">&#9670;&nbsp;</a></span>getMaxComputationTime()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::getMaxComputationTime </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>返回</dt><dd>the maximum computation time in seconds. </dd></dl>
<div class="fragment"><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;      {</div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ad40457d6fb0195815064f07bb391bdb8">max_runtime_</a>);</div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;      };</div>
</div><!-- fragment -->
</div>
</div>
<a id="aaf0bead72f8615e1b2a1c95d9fde56e9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaf0bead72f8615e1b2a1c95d9fde56e9">&#9670;&nbsp;</a></span>getMaxNormalDifference()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::getMaxNormalDifference </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>返回</dt><dd>the maximum normal difference between valid point correspondences in degree. </dd></dl>
<div class="fragment"><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;      {</div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a86d337480d265ecec717c579f9d31e0b">max_norm_diff_</a>);</div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;      };</div>
</div><!-- fragment -->
</div>
</div>
<a id="a253131c45e83164d20c55fdab9048381"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a253131c45e83164d20c55fdab9048381">&#9670;&nbsp;</a></span>getNumberOfSamples()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::getNumberOfSamples </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>返回</dt><dd>the number of source samples to use during alignment. </dd></dl>
<div class="fragment"><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;      {</div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a687508b1d693488cbf0d8d44fe88ad27">nr_samples_</a>);</div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;      };</div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a687508b1d693488cbf0d8d44fe88ad27"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a687508b1d693488cbf0d8d44fe88ad27">pcl::registration::FPCSInitialAlignment::nr_samples_</a></div><div class="ttdeci">int nr_samples_</div><div class="ttdoc">The number of points to uniformly sample the source point cloud. (standard = 0 =&gt; full cloud).</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:499</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a131f83c6bcfabdba77e755bdb67a5953"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a131f83c6bcfabdba77e755bdb67a5953">&#9670;&nbsp;</a></span>getNumberOfThreads()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::getNumberOfThreads </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>返回</dt><dd>the number of threads used if OpenMP is activated. </dd></dl>
<div class="fragment"><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;      {</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a79ee6d98864fca46bc61903e8b609120">nr_threads_</a>);</div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;      };</div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a79ee6d98864fca46bc61903e8b609120"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a79ee6d98864fca46bc61903e8b609120">pcl::registration::FPCSInitialAlignment::nr_threads_</a></div><div class="ttdeci">int nr_threads_</div><div class="ttdoc">Number of threads for parallelization (standard = 1).</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:481</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a78bb7383b970ab1506467cb4f56ad52e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a78bb7383b970ab1506467cb4f56ad52e">&#9670;&nbsp;</a></span>getScoreThreshold()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::getScoreThreshold </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>返回</dt><dd>the scoring threshold used for early finishing the method. </dd></dl>
<div class="fragment"><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;      {</div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ad781377604c1837191309b7e2d7f21be">score_threshold_</a>);</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;      };</div>
</div><!-- fragment -->
</div>
</div>
<a id="aa0e95c127d6ff418e4984919fb7f1005"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa0e95c127d6ff418e4984919fb7f1005">&#9670;&nbsp;</a></span>getSourceNormals()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">NormalsConstPtr <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::getSourceNormals </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>返回</dt><dd>the normals of the source point cloud. </dd></dl>
<div class="fragment"><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;      {</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a58a3035634e2177a521437b7242e7e5f">source_normals_</a>);</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;      };</div>
</div><!-- fragment -->
</div>
</div>
<a id="a85d2bad3d4e64d1f1ba785811e29e012"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a85d2bad3d4e64d1f1ba785811e29e012">&#9670;&nbsp;</a></span>getTargetIndices()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">IndicesPtr <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::getTargetIndices </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>返回</dt><dd>a pointer to the vector of target indices. </dd></dl>
<div class="fragment"><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;      {</div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a59d3bd4a7820b1ae65edf07dc600518e">target_indices_</a>);</div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;      };</div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a59d3bd4a7820b1ae65edf07dc600518e"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a59d3bd4a7820b1ae65edf07dc600518e">pcl::registration::FPCSInitialAlignment::target_indices_</a></div><div class="ttdeci">pcl::IndicesPtr target_indices_</div><div class="ttdoc">A pointer to the vector of target point indices to use after sampling.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:533</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="aa17c6751d2fb08647ffbcbfbbba4e32e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa17c6751d2fb08647ffbcbfbbba4e32e">&#9670;&nbsp;</a></span>getTargetNormals()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">NormalsConstPtr <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::getTargetNormals </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>返回</dt><dd>the normals of the target point cloud. </dd></dl>
<div class="fragment"><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;      {</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a584efd5f1587d8bbdca3b2c5de69b25d">target_normals_</a>);</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;      };</div>
</div><!-- fragment -->
</div>
</div>
<a id="a0d59c76f9a58f59caf2b63e377aca6bb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0d59c76f9a58f59caf2b63e377aca6bb">&#9670;&nbsp;</a></span>handleMatches()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::handleMatches </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>base_indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; std::vector&lt; int &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>matches</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">MatchingCandidates &amp;&#160;</td>
          <td class="paramname"><em>candidates</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Method to handle current candidate matches. Here we validate and evaluate the matches w.r.t the base and store the best fitting match (together with its score and estimated transformation). </p>
<dl class="section note"><dt>注解</dt><dd>For forwards compatibility the results are stored in 'vectors of size 1'.</dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">base_indices</td><td>indices of base B </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">matches</td><td>vector of candidate matches w.r.t the base B. The candidate matches are reordered during this step. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">candidates</td><td>vector which contains the candidates matches M </td></tr>
  </table>
  </dd>
</dl>

<p>被 <a class="el" href="classpcl_1_1registration_1_1_k_f_p_c_s_initial_alignment.html#a298dabf7d1cb6d958ff9923df55581c6">pcl::registration::KFPCSInitialAlignment&lt; PointSource, PointTarget, NormalT, Scalar &gt;</a> 重载.</p>
<div class="fragment"><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;{</div>
<div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;  candidates.resize (1);</div>
<div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;  <span class="keywordtype">float</span> fitness_score = FLT_MAX;</div>
<div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160; </div>
<div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;  <span class="comment">// loop over all Candidate matches</span></div>
<div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;  <span class="keywordflow">for</span> (std::vector &lt;std::vector &lt;int&gt; &gt;::iterator match_indices = matches.begin (), it_e = matches.end (); match_indices != it_e; match_indices++)</div>
<div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;  {</div>
<div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;    Eigen::Matrix4f transformation_temp;</div>
<div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;    pcl::Correspondences correspondences_temp;</div>
<div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160; </div>
<div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;    <span class="comment">// determine corresondences between base and match according to their distance to centroid</span></div>
<div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;    <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ab5b94e6b02f11c17f4b10af2c89f6228">linkMatchWithBase</a> (base_indices, *match_indices, correspondences_temp);</div>
<div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160; </div>
<div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;    <span class="comment">// check match based on residuals of the corresponding points after</span></div>
<div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac63173082b064d29ac50cee964ec930e">validateMatch</a> (base_indices, *match_indices, correspondences_temp, transformation_temp) &lt; 0)</div>
<div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;      <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160; </div>
<div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;    <span class="comment">// check resulting  using a sub sample of the source point cloud and compare to previous matches</span></div>
<div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a2e628406e7a4bfbc06754fc89da60c2b">validateTransformation</a> (transformation_temp, fitness_score) &lt; 0)</div>
<div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;      <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160; </div>
<div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;    <span class="comment">// store best match as well as associated fitness_score and transformation</span></div>
<div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;    candidates[0].fitness_score = fitness_score;</div>
<div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;    candidates [0].transformation = transformation_temp;</div>
<div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;    correspondences_temp.erase (correspondences_temp.end () - 1);</div>
<div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;    candidates[0].correspondences = correspondences_temp;</div>
<div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;  }</div>
<div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a2e628406e7a4bfbc06754fc89da60c2b"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a2e628406e7a4bfbc06754fc89da60c2b">pcl::registration::FPCSInitialAlignment::validateTransformation</a></div><div class="ttdeci">virtual int validateTransformation(Eigen::Matrix4f &amp;transformation, float &amp;fitness_score)</div><div class="ttdoc">Validate the transformation by calculating the number of inliers after transforming the source cloud....</div><div class="ttdef"><b>Definition:</b> ia_fpcs.hpp:844</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_ab5b94e6b02f11c17f4b10af2c89f6228"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ab5b94e6b02f11c17f4b10af2c89f6228">pcl::registration::FPCSInitialAlignment::linkMatchWithBase</a></div><div class="ttdeci">virtual void linkMatchWithBase(const std::vector&lt; int &gt; &amp;base_indices, std::vector&lt; int &gt; &amp;match_indices, pcl::Correspondences &amp;correspondences)</div><div class="ttdoc">Sets the correspondences between the base B and the match M by using the distance of each point to th...</div><div class="ttdef"><b>Definition:</b> ia_fpcs.hpp:760</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_ac63173082b064d29ac50cee964ec930e"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac63173082b064d29ac50cee964ec930e">pcl::registration::FPCSInitialAlignment::validateMatch</a></div><div class="ttdeci">virtual int validateMatch(const std::vector&lt; int &gt; &amp;base_indices, const std::vector&lt; int &gt; &amp;match_indices, const pcl::Correspondences &amp;correspondences, Eigen::Matrix4f &amp;transformation)</div><div class="ttdoc">Validate the matching by computing the transformation between the source and target based on the four...</div><div class="ttdef"><b>Definition:</b> ia_fpcs.hpp:814</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ab5b94e6b02f11c17f4b10af2c89f6228"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab5b94e6b02f11c17f4b10af2c89f6228">&#9670;&nbsp;</a></span>linkMatchWithBase()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::linkMatchWithBase </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>base_indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>match_indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">pcl::Correspondences &amp;&#160;</td>
          <td class="paramname"><em>correspondences</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Sets the correspondences between the base B and the match M by using the distance of each point to the centroid of the rectangle. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">base_indices</td><td>indices of base B </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">match_indices</td><td>indices of match M </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">correspondences</td><td>resulting correspondences </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;{</div>
<div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;  <span class="comment">// calculate centroid of base and target</span></div>
<div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;  Eigen::Vector4f centre_base, centre_match;</div>
<div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;  <a class="code" href="group__common.html#gaf5729fae15603888b49743b118025290">pcl::compute3DCentroid</a> (*<a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>, base_indices, centre_base);</div>
<div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;  <a class="code" href="group__common.html#gaf5729fae15603888b49743b118025290">pcl::compute3DCentroid</a> (*<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>, match_indices, centre_match);</div>
<div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160; </div>
<div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;  PointTarget centre_pt_base;</div>
<div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;  centre_pt_base.x = centre_base[0];</div>
<div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;  centre_pt_base.y = centre_base[1];</div>
<div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;  centre_pt_base.z = centre_base[2];</div>
<div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160; </div>
<div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;  PointSource centre_pt_match;</div>
<div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;  centre_pt_match.x = centre_match[0];</div>
<div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;  centre_pt_match.y = centre_match[1];</div>
<div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;  centre_pt_match.z = centre_match[2];</div>
<div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160; </div>
<div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;  <span class="comment">// find corresponding points according to their distance to the centroid</span></div>
<div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;  std::vector &lt;int&gt; copy = match_indices;</div>
<div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160; </div>
<div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;  std::vector &lt;int&gt;::const_iterator it_base = base_indices.begin (), it_base_e = base_indices.end ();</div>
<div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;  std::vector &lt;int&gt;::iterator it_match, it_match_e = copy.end ();</div>
<div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;  std::vector &lt;int&gt;::iterator it_match_orig = match_indices.begin ();</div>
<div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;  <span class="keywordflow">for</span> (; it_base != it_base_e; it_base++, it_match_orig++)</div>
<div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;  {</div>
<div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;    <span class="keywordtype">float</span> dist_sqr_1 = <a class="code" href="common_2include_2pcl_2common_2distances_8h.html#a28ecc173df18d9175dee9f4dd042390b">pcl::squaredEuclideanDistance</a> (<a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[*it_base], centre_pt_base);</div>
<div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;    <span class="keywordtype">float</span> best_diff_sqr = FLT_MAX;</div>
<div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;    <span class="keywordtype">int</span> best_index;</div>
<div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160; </div>
<div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;    <span class="keywordflow">for</span> (it_match = copy.begin (); it_match != it_match_e; it_match++)</div>
<div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;    {</div>
<div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;      <span class="comment">// calculate difference of distances to centre point</span></div>
<div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;      <span class="keywordtype">float</span> dist_sqr_2 = <a class="code" href="common_2include_2pcl_2common_2distances_8h.html#a28ecc173df18d9175dee9f4dd042390b">pcl::squaredEuclideanDistance</a> (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[*it_match], centre_pt_match);</div>
<div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;      <span class="keywordtype">float</span> diff_sqr = std::abs(dist_sqr_1 - dist_sqr_2);</div>
<div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160; </div>
<div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;      <span class="keywordflow">if</span> (diff_sqr &lt; best_diff_sqr)</div>
<div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;      {</div>
<div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;        best_diff_sqr = diff_sqr;</div>
<div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;        best_index = *it_match;</div>
<div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;      }</div>
<div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;    }</div>
<div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160; </div>
<div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;    <span class="comment">// assign new correspondence and update indices of matched targets</span></div>
<div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;    correspondences.push_back (<a class="code" href="structpcl_1_1_correspondence.html">pcl::Correspondence</a> (best_index, *it_base, best_diff_sqr));</div>
<div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;    *it_match_orig = best_index;</div>
<div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;  }</div>
<div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;}</div>
<div class="ttc" id="acommon_2include_2pcl_2common_2distances_8h_html_a28ecc173df18d9175dee9f4dd042390b"><div class="ttname"><a href="common_2include_2pcl_2common_2distances_8h.html#a28ecc173df18d9175dee9f4dd042390b">pcl::squaredEuclideanDistance</a></div><div class="ttdeci">float squaredEuclideanDistance(const PointType1 &amp;p1, const PointType2 &amp;p2)</div><div class="ttdoc">Calculate the squared euclidean distance between the two given points.</div><div class="ttdef"><b>Definition:</b> distances.h:174</div></div>
<div class="ttc" id="agroup__common_html_gaf5729fae15603888b49743b118025290"><div class="ttname"><a href="group__common.html#gaf5729fae15603888b49743b118025290">pcl::compute3DCentroid</a></div><div class="ttdeci">unsigned int compute3DCentroid(ConstCloudIterator&lt; PointT &gt; &amp;cloud_iterator, Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid)</div><div class="ttdoc">Compute the 3D (X-Y-Z) centroid of a set of points and return it as a 3D vector.</div><div class="ttdef"><b>Definition:</b> centroid.hpp:50</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ac421e4c56100d9e5a2355252eb9a3643"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac421e4c56100d9e5a2355252eb9a3643">&#9670;&nbsp;</a></span>segmentToSegmentDist()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::segmentToSegmentDist </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>base_indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float(&amp;)&#160;</td>
          <td class="paramname"><em>ratio</em>[2]&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Calculate intersection ratios and segment to segment distances of base diagonals. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">base_indices</td><td>indices of base B </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">ratio</td><td>diagonal intersection ratios of base points </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>quality value of diagonal intersection </dd></dl>
<div class="fragment"><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;{</div>
<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;  <span class="comment">// get point vectors</span></div>
<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;  Eigen::Vector3f u = <a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[base_indices[1]].getVector3fMap () - <a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[base_indices[0]].getVector3fMap ();</div>
<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;  Eigen::Vector3f v = <a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[base_indices[3]].getVector3fMap () - <a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[base_indices[2]].getVector3fMap ();</div>
<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;  Eigen::Vector3f w = <a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[base_indices[0]].getVector3fMap () - <a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[base_indices[2]].getVector3fMap ();</div>
<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160; </div>
<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;  <span class="comment">// calculate segment distances</span></div>
<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;  <span class="keywordtype">float</span> a = u.dot (u);</div>
<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;  <span class="keywordtype">float</span> b = u.dot (v);</div>
<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;  <span class="keywordtype">float</span> c = v.dot (v);</div>
<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;  <span class="keywordtype">float</span> d = u.dot (w);</div>
<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;  <span class="keywordtype">float</span> e = v.dot (w);</div>
<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;  <span class="keywordtype">float</span> D = a * c - b * b;</div>
<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;  <span class="keywordtype">float</span> sN = 0.f, sD = D;</div>
<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;  <span class="keywordtype">float</span> tN = 0.f, tD = D;</div>
<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160; </div>
<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;  <span class="comment">// check segments</span></div>
<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;  <span class="keywordflow">if</span> (D &lt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac48c4fb7b4e3dbd410cc016129eb864a">small_error_</a>)</div>
<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;  {</div>
<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;    sN = 0.f;</div>
<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;    sD = 1.f;</div>
<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;    tN = e;</div>
<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;    tD = c;</div>
<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;  }</div>
<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;  {</div>
<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;    sN = (b * e - c * d);</div>
<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;    tN = (a * e - b * d);</div>
<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160; </div>
<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;    <span class="keywordflow">if</span> (sN &lt; 0.f)</div>
<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;    {</div>
<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;      sN = 0.f;</div>
<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;      tN = e;</div>
<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;      tD = c;</div>
<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;    }</div>
<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sN &gt; sD)</div>
<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;    {</div>
<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;      sN = sD;</div>
<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;      tN = e + b;</div>
<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;      tD = c;</div>
<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;    }</div>
<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;  }</div>
<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160; </div>
<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;  <span class="keywordflow">if</span> (tN &lt; 0.f)</div>
<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;  {</div>
<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;    tN = 0.f;</div>
<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160; </div>
<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;    <span class="keywordflow">if</span> (-d &lt; 0.f)</div>
<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;      sN = 0.f;</div>
<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160; </div>
<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (-d &gt; a)</div>
<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;      sN = sD;</div>
<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160; </div>
<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;    {</div>
<div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;      sN = -d;</div>
<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;      sD = a;</div>
<div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;    }</div>
<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;  }</div>
<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160; </div>
<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tN &gt; tD)</div>
<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;  {</div>
<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;    tN = tD;</div>
<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160; </div>
<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;    <span class="keywordflow">if</span> ((-d + b) &lt; 0.f)</div>
<div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;      sN = 0.f;</div>
<div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160; </div>
<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((-d + b) &gt; a)</div>
<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;      sN = sD;</div>
<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160; </div>
<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;    {</div>
<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;      sN = (-d + b);</div>
<div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;      sD = a;</div>
<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;    }</div>
<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;  }</div>
<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160; </div>
<div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;  <span class="comment">// set intersection ratios</span></div>
<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;  ratio[0] = (std::abs (sN) &lt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac48c4fb7b4e3dbd410cc016129eb864a">small_error_</a>) ? 0.f : sN / sD;</div>
<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;  ratio[1] = (std::abs (tN) &lt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac48c4fb7b4e3dbd410cc016129eb864a">small_error_</a>) ? 0.f : tN / tD;</div>
<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160; </div>
<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;  Eigen::Vector3f x = w + (ratio[0] * u) - (ratio[1] * v);</div>
<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;  <span class="keywordflow">return</span> (x.norm ());</div>
<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_ac48c4fb7b4e3dbd410cc016129eb864a"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac48c4fb7b4e3dbd410cc016129eb864a">pcl::registration::FPCSInitialAlignment::small_error_</a></div><div class="ttdeci">const float small_error_</div><div class="ttdoc">Definition of a small error.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:562</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ac34b9f119a6d69a1b7a646bdb8e8dace"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac34b9f119a6d69a1b7a646bdb8e8dace">&#9670;&nbsp;</a></span>selectBase()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::selectBase </td>
          <td>(</td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>base_indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float(&amp;)&#160;</td>
          <td class="paramname"><em>ratio</em>[2]&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Select an approximately coplanar set of four points from the source cloud. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">base_indices</td><td>selected source cloud indices, further used as base (B) </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">ratio</td><td>the two diagonal intersection ratios (r1,r2) of the base points </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><ul>
<li>&lt; 0 no coplanar four point sets with large enough sampling distance was found</li>
<li>= 0 a set of four congruent points was selected </li>
</ul>
</dd></dl>
<div class="fragment"><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;{</div>
<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> too_close_sqr = <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a2861efeafe48b0000b9c3f40929a41af">max_base_diameter_sqr_</a>*0.01;</div>
<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160; </div>
<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;  Eigen::VectorXf coefficients (4);</div>
<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;  <a class="code" href="classpcl_1_1_sample_consensus_model_plane.html">pcl::SampleConsensusModelPlane &lt;PointTarget&gt;</a> plane (<a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>);</div>
<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;  plane.setIndices (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a59d3bd4a7820b1ae65edf07dc600518e">target_indices_</a>);</div>
<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;  Eigen::Vector4f centre_pt;</div>
<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;  <span class="keywordtype">float</span> nearest_to_plane = FLT_MAX;</div>
<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160; </div>
<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;  <span class="comment">// repeat base search until valid quadruple was found or ransac_iterations_ number of trys were unsuccessfull</span></div>
<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classpcl_1_1_registration.html#a9099e6970624c4ee91817f3f97f82f7f">ransac_iterations_</a>; i++)</div>
<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;  {</div>
<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;    <span class="comment">// random select an appropriate point triple</span></div>
<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a16ab9f8757cec569bb0f38544141df7f">selectBaseTriangle</a> (base_indices) &lt; 0)</div>
<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;      <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160; </div>
<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;    std::vector &lt;int&gt; base_triple (base_indices.begin (), base_indices.end () - 1);</div>
<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;    plane.computeModelCoefficients (base_triple, coefficients);</div>
<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    <a class="code" href="group__common.html#gaf5729fae15603888b49743b118025290">pcl::compute3DCentroid</a> (*<a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>, base_triple, centre_pt);</div>
<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160; </div>
<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;    <span class="comment">// loop over all points in source cloud to find most suitable fourth point</span></div>
<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;    <span class="keyword">const</span> PointTarget *pt1 = &amp;(<a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[base_indices[0]]);</div>
<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    <span class="keyword">const</span> PointTarget *pt2 = &amp;(<a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[base_indices[1]]);</div>
<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;    <span class="keyword">const</span> PointTarget *pt3 = &amp;(<a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[base_indices[2]]);</div>
<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160; </div>
<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;    <span class="keywordflow">for</span> (std::vector &lt;int&gt;::iterator it = <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a59d3bd4a7820b1ae65edf07dc600518e">target_indices_</a>-&gt;begin (), it_e = <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a59d3bd4a7820b1ae65edf07dc600518e">target_indices_</a>-&gt;end (); it != it_e; it++)</div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;    {</div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;      <span class="keyword">const</span> PointTarget *pt4 = &amp;(<a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[*it]);</div>
<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160; </div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;      <span class="keywordtype">float</span> d1 = <a class="code" href="common_2include_2pcl_2common_2distances_8h.html#a28ecc173df18d9175dee9f4dd042390b">pcl::squaredEuclideanDistance</a> (*pt4, *pt1);</div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;      <span class="keywordtype">float</span> d2 = <a class="code" href="common_2include_2pcl_2common_2distances_8h.html#a28ecc173df18d9175dee9f4dd042390b">pcl::squaredEuclideanDistance</a> (*pt4, *pt2);</div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;      <span class="keywordtype">float</span> d3 = <a class="code" href="common_2include_2pcl_2common_2distances_8h.html#a28ecc173df18d9175dee9f4dd042390b">pcl::squaredEuclideanDistance</a> (*pt4, *pt3);</div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;      <span class="keywordtype">float</span> d4 = (pt4-&gt;getVector3fMap ()  - centre_pt.head (3)).squaredNorm ();</div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160; </div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;      <span class="comment">// check distance between points w.r.t minimum sampling distance; EDITED -&gt; 4th point now also limited by max base line</span></div>
<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;      <span class="keywordflow">if</span> (d1 &lt; too_close_sqr || d2 &lt; too_close_sqr || d3 &lt; too_close_sqr || d4 &lt; too_close_sqr ||</div>
<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;        d1 &gt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a2861efeafe48b0000b9c3f40929a41af">max_base_diameter_sqr_</a> || d2 &gt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a2861efeafe48b0000b9c3f40929a41af">max_base_diameter_sqr_</a> || d3 &gt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a2861efeafe48b0000b9c3f40929a41af">max_base_diameter_sqr_</a>)</div>
<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160; </div>
<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;      <span class="comment">// check distance to plane to get point closest to plane</span></div>
<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;      <span class="keywordtype">float</span> dist_to_plane = pcl::pointToPlaneDistance (*pt4, coefficients);</div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;      <span class="keywordflow">if</span> (dist_to_plane &lt; nearest_to_plane)</div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;      {</div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;        base_indices[3] = *it;</div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;        nearest_to_plane = dist_to_plane;</div>
<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;      }</div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;    }</div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160; </div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;    <span class="comment">// check if at least one point fullfilled the conditions</span></div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;    <span class="keywordflow">if</span> (nearest_to_plane != FLT_MAX)</div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    {</div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;      <span class="comment">// order points to build largest quadrangle and calcuate intersection ratios of diagonals</span></div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;      <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a607d3bf724f8304008a8e35a6b0a64c8">setupBase</a> (base_indices, ratio);</div>
<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;      <span class="keywordflow">return</span> (0);</div>
<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;    }</div>
<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;  }</div>
<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160; </div>
<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;  <span class="comment">// return unsuccessfull if no quadruple was selected</span></div>
<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;  <span class="keywordflow">return</span> (-1);</div>
<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_registration_html_a9099e6970624c4ee91817f3f97f82f7f"><div class="ttname"><a href="classpcl_1_1_registration.html#a9099e6970624c4ee91817f3f97f82f7f">pcl::Registration&lt; PointSource, PointTarget, float &gt;::ransac_iterations_</a></div><div class="ttdeci">int ransac_iterations_</div><div class="ttdoc">The number of iterations RANSAC should run for.</div><div class="ttdef"><b>Definition:</b> registration.h:499</div></div>
<div class="ttc" id="aclasspcl_1_1_sample_consensus_model_plane_html"><div class="ttname"><a href="classpcl_1_1_sample_consensus_model_plane.html">pcl::SampleConsensusModelPlane</a></div><div class="ttdoc">SampleConsensusModelPlane defines a model for 3D plane segmentation. The model coefficients are defin...</div><div class="ttdef"><b>Definition:</b> sac_model_plane.h:137</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a16ab9f8757cec569bb0f38544141df7f"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a16ab9f8757cec569bb0f38544141df7f">pcl::registration::FPCSInitialAlignment::selectBaseTriangle</a></div><div class="ttdeci">int selectBaseTriangle(std::vector&lt; int &gt; &amp;base_indices)</div><div class="ttdoc">Select randomly a triplet of points with large point-to-point distances. The minimum point sampling d...</div><div class="ttdef"><b>Definition:</b> ia_fpcs.hpp:401</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a2861efeafe48b0000b9c3f40929a41af"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a2861efeafe48b0000b9c3f40929a41af">pcl::registration::FPCSInitialAlignment::max_base_diameter_sqr_</a></div><div class="ttdeci">float max_base_diameter_sqr_</div><div class="ttdoc">Estimated squared metric overlap between source and target.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:520</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a607d3bf724f8304008a8e35a6b0a64c8"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a607d3bf724f8304008a8e35a6b0a64c8">pcl::registration::FPCSInitialAlignment::setupBase</a></div><div class="ttdeci">void setupBase(std::vector&lt; int &gt; &amp;base_indices, float(&amp;ratio)[2])</div><div class="ttdoc">Setup the base (four coplanar points) by ordering the points and computing intersection ratios and se...</div><div class="ttdef"><b>Definition:</b> ia_fpcs.hpp:436</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a16ab9f8757cec569bb0f38544141df7f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a16ab9f8757cec569bb0f38544141df7f">&#9670;&nbsp;</a></span>selectBaseTriangle()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::selectBaseTriangle </td>
          <td>(</td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>base_indices</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Select randomly a triplet of points with large point-to-point distances. The minimum point sampling distance is calculated based on the estimated point cloud overlap during initialization. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">base_indices</td><td>indices of base B </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><ul>
<li>&lt; 0 no triangle with large enough base lines could be selected</li>
<li>= 0 base triangle succesully selected </li>
</ul>
</dd></dl>
<div class="fragment"><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;{</div>
<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;  <span class="keywordtype">int</span> nr_points = <span class="keyword">static_cast &lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a59d3bd4a7820b1ae65edf07dc600518e">target_indices_</a>-&gt;size ());</div>
<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;  <span class="keywordtype">float</span> best_t = 0.f;</div>
<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160; </div>
<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;  <span class="comment">// choose random first point</span></div>
<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;  base_indices[0] = (*target_indices_)[rand () % nr_points];</div>
<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;  <span class="keywordtype">int</span> *index1 = &amp;base_indices[0];</div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160; </div>
<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;  <span class="comment">// random search for 2 other points (as far away as overlap allows)</span></div>
<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classpcl_1_1_registration.html#a9099e6970624c4ee91817f3f97f82f7f">ransac_iterations_</a>; i++)</div>
<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;  {</div>
<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    <span class="keywordtype">int</span> *index2 = &amp;(*target_indices_)[rand () % nr_points];</div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;    <span class="keywordtype">int</span> *index3 = &amp;(*target_indices_)[rand () % nr_points];</div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160; </div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;    Eigen::Vector3f u = <a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[*index2].getVector3fMap () - <a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[*index1].getVector3fMap ();</div>
<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    Eigen::Vector3f v = <a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[*index3].getVector3fMap () - <a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points[*index1].getVector3fMap ();</div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;    <span class="keywordtype">float</span> t = u.cross (v).squaredNorm (); <span class="comment">// triangle area (0.5 * sqrt(t)) should be maximal</span></div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160; </div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;    <span class="comment">// check for most suitable point triple</span></div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;    <span class="keywordflow">if</span> (t &gt; best_t &amp;&amp; u.squaredNorm () &lt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a2861efeafe48b0000b9c3f40929a41af">max_base_diameter_sqr_</a> &amp;&amp; v.squaredNorm () &lt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a2861efeafe48b0000b9c3f40929a41af">max_base_diameter_sqr_</a>)</div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;    {</div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;      best_t = t;</div>
<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;      base_indices[1] = *index2;</div>
<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;      base_indices[2] = *index3;</div>
<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;    }</div>
<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;  }</div>
<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160; </div>
<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;  <span class="comment">// return if a triplet could be selected</span></div>
<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;  <span class="keywordflow">return</span> (best_t == 0.f ? -1 : 0);</div>
<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="abc0d762f0db804c6cb9bf920d40cc489"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abc0d762f0db804c6cb9bf920d40cc489">&#9670;&nbsp;</a></span>setApproxOverlap()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::setApproxOverlap </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>approx_overlap</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the approximate overlap between source and target. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">approx_overlap</td><td>the estimated overlap </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;      {</div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;        <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a68e2113bbe29d792687e75ba5356c95e">approx_overlap_</a> = approx_overlap;</div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;      };</div>
</div><!-- fragment -->
</div>
</div>
<a id="aec7f1feeb435aa54f101d2e7bbd72f21"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aec7f1feeb435aa54f101d2e7bbd72f21">&#9670;&nbsp;</a></span>setDelta()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::setDelta </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>delta</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>normalize</em> = <code>false</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the constant factor delta which weights the internally calculated parameters. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">delta</td><td>the weight factor delta </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">normalize</td><td>flag if delta should be normalized according to point cloud density </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;      {</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;        <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a220d5b152bbde5a585be5d7f3228fe24">delta_</a> = delta;</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;        <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a4e4cdf295813f3638c368db57c94de36">normalize_delta_</a> = normalize;</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;      };</div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a4e4cdf295813f3638c368db57c94de36"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a4e4cdf295813f3638c368db57c94de36">pcl::registration::FPCSInitialAlignment::normalize_delta_</a></div><div class="ttdeci">bool normalize_delta_</div><div class="ttdoc">Normalize delta flag.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:526</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ab3d8c0104ac8609d0339a93eeecc4122"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab3d8c0104ac8609d0339a93eeecc4122">&#9670;&nbsp;</a></span>setMaxComputationTime()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::setMaxComputationTime </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>max_runtime</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the maximum computation time in seconds. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">max_runtime</td><td>the maximum runtime of the method in seconds </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;      {</div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;        <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ad40457d6fb0195815064f07bb391bdb8">max_runtime_</a> = max_runtime;</div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;      };</div>
</div><!-- fragment -->
</div>
</div>
<a id="a5a9a5e68448776b198ca6ab7de3f9a15"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5a9a5e68448776b198ca6ab7de3f9a15">&#9670;&nbsp;</a></span>setMaxNormalDifference()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::setMaxNormalDifference </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>max_norm_diff</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the maximum normal difference between valid point correspondences in degree. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">max_norm_diff</td><td>the maximum difference in degree </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;      {</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;        <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a86d337480d265ecec717c579f9d31e0b">max_norm_diff_</a> = max_norm_diff;</div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;      };</div>
</div><!-- fragment -->
</div>
</div>
<a id="a2824fb50e0505f063b34b4b4025d0b3d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2824fb50e0505f063b34b4b4025d0b3d">&#9670;&nbsp;</a></span>setNumberOfSamples()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::setNumberOfSamples </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>nr_samples</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the number of source samples to use during alignment. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">nr_samples</td><td>the number of source samples </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;      {</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;        <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a687508b1d693488cbf0d8d44fe88ad27">nr_samples_</a> = nr_samples;</div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;      };</div>
</div><!-- fragment -->
</div>
</div>
<a id="ab9b80f921aadde46ed70b43f4532d667"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab9b80f921aadde46ed70b43f4532d667">&#9670;&nbsp;</a></span>setNumberOfThreads()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::setNumberOfThreads </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>nr_threads</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the number of used threads if OpenMP is activated. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">nr_threads</td><td>the number of used threads </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;      {</div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;        <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a79ee6d98864fca46bc61903e8b609120">nr_threads_</a> = nr_threads;</div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;      };</div>
</div><!-- fragment -->
</div>
</div>
<a id="a4fba9748dd98686d0008fbef54a9b5f4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4fba9748dd98686d0008fbef54a9b5f4">&#9670;&nbsp;</a></span>setScoreThreshold()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::setScoreThreshold </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>score_threshold</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the scoring threshold used for early finishing the method. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">score_threshold</td><td>early terminating score criteria </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;      {</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;        <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ad781377604c1837191309b7e2d7f21be">score_threshold_</a> = score_threshold;</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;      };</div>
</div><!-- fragment -->
</div>
</div>
<a id="a9d5b57625988fd5c3bf4a9d5c21c85c6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9d5b57625988fd5c3bf4a9d5c21c85c6">&#9670;&nbsp;</a></span>setSourceNormals()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::setSourceNormals </td>
          <td>(</td>
          <td class="paramtype">const NormalsConstPtr &amp;&#160;</td>
          <td class="paramname"><em>source_normals</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Provide a pointer to the normals of the source point cloud. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">source_normals</td><td>pointer to the normals of the source pointer cloud. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;      {</div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;        <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a58a3035634e2177a521437b7242e7e5f">source_normals_</a> = source_normals;</div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;      };</div>
</div><!-- fragment -->
</div>
</div>
<a id="ab46e5073a10bc995892851dacfb08b9b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab46e5073a10bc995892851dacfb08b9b">&#9670;&nbsp;</a></span>setTargetIndices()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::setTargetIndices </td>
          <td>(</td>
          <td class="paramtype">const IndicesPtr &amp;&#160;</td>
          <td class="paramname"><em>target_indices</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Provide a pointer to the vector of target indices. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">target_indices</td><td>a pointer to the target indices </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;      {</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;        <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a59d3bd4a7820b1ae65edf07dc600518e">target_indices_</a> = target_indices;</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;      };</div>
</div><!-- fragment -->
</div>
</div>
<a id="a026d369a066582d669a5591a682cc040"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a026d369a066582d669a5591a682cc040">&#9670;&nbsp;</a></span>setTargetNormals()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::setTargetNormals </td>
          <td>(</td>
          <td class="paramtype">const NormalsConstPtr &amp;&#160;</td>
          <td class="paramname"><em>target_normals</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Provide a pointer to the normals of the target point cloud. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">target_normals</td><td>point to the normals of the target point cloud. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;      {</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;        <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a584efd5f1587d8bbdca3b2c5de69b25d">target_normals_</a> = target_normals;</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;      };</div>
</div><!-- fragment -->
</div>
</div>
<a id="a607d3bf724f8304008a8e35a6b0a64c8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a607d3bf724f8304008a8e35a6b0a64c8">&#9670;&nbsp;</a></span>setupBase()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::setupBase </td>
          <td>(</td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>base_indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float(&amp;)&#160;</td>
          <td class="paramname"><em>ratio</em>[2]&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Setup the base (four coplanar points) by ordering the points and computing intersection ratios and segment to segment distances of base diagonal. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">base_indices</td><td>indices of base B (will be reordered) </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">ratio</td><td>diagonal intersection ratios of base points </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;{</div>
<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;  <span class="keywordtype">float</span> best_t = FLT_MAX;</div>
<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;  <span class="keyword">const</span> std::vector &lt;int&gt; copy (base_indices.begin (), base_indices.end ());</div>
<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;  std::vector &lt;int&gt; temp (base_indices.begin (), base_indices.end ());</div>
<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160; </div>
<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;  <span class="comment">// loop over all combinations of base points</span></div>
<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;  <span class="keywordflow">for</span> (std::vector &lt;int&gt;::const_iterator i = copy.begin (), i_e = copy.end (); i != i_e; i++)</div>
<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;  <span class="keywordflow">for</span> (std::vector &lt;int&gt;::const_iterator j = copy.begin (), j_e = copy.end (); j != j_e; j++)</div>
<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;  {</div>
<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;    <span class="keywordflow">if</span> (i == j)</div>
<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;      <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160; </div>
<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;    <span class="keywordflow">for</span> (std::vector &lt;int&gt;::const_iterator k = copy.begin (), k_e = copy.end (); k != k_e; k++)</div>
<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    {</div>
<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;      <span class="keywordflow">if</span> (k == j || k == i)</div>
<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160; </div>
<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;      std::vector &lt;int&gt;::const_iterator l = copy.begin ();</div>
<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;      <span class="keywordflow">while</span> (l == i || l == j || l == k)</div>
<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;        l++;</div>
<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160; </div>
<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;      temp[0] = *i;</div>
<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;      temp[1] = *j;</div>
<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;      temp[2] = *k;</div>
<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;      temp[3] = *l;</div>
<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160; </div>
<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;      <span class="comment">// calculate diagonal intersection ratios and check for suitable segment to segment distances</span></div>
<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;      <span class="keywordtype">float</span> ratio_temp[2];</div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;      <span class="keywordtype">float</span> t = <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac421e4c56100d9e5a2355252eb9a3643">segmentToSegmentDist</a> (temp, ratio_temp);</div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;      <span class="keywordflow">if</span> (t &lt; best_t)</div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;      {</div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;        best_t = t;</div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;        ratio[0] = ratio_temp[0];</div>
<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;        ratio[1] = ratio_temp[1];</div>
<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;        base_indices = temp;</div>
<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;      }</div>
<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;    }</div>
<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;  }</div>
<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_ac421e4c56100d9e5a2355252eb9a3643"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#ac421e4c56100d9e5a2355252eb9a3643">pcl::registration::FPCSInitialAlignment::segmentToSegmentDist</a></div><div class="ttdeci">float segmentToSegmentDist(const std::vector&lt; int &gt; &amp;base_indices, float(&amp;ratio)[2])</div><div class="ttdoc">Calculate intersection ratios and segment to segment distances of base diagonals.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.hpp:482</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ac63173082b064d29ac50cee964ec930e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac63173082b064d29ac50cee964ec930e">&#9670;&nbsp;</a></span>validateMatch()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::validateMatch </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>base_indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>match_indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const pcl::Correspondences &amp;&#160;</td>
          <td class="paramname"><em>correspondences</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix4f &amp;&#160;</td>
          <td class="paramname"><em>transformation</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Validate the matching by computing the transformation between the source and target based on the four matched points and by comparing the mean square error (MSE) to a threshold. The MSE limit was calculated during initialization (max_mse_). </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">base_indices</td><td>indices of base B </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">match_indices</td><td>indices of match M </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">correspondences</td><td>corresondences between source and target </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">transformation</td><td>resulting transformation matrix </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><ul>
<li>&lt; 0 MSE bigger than max_mse_</li>
<li>= 0 MSE smaller than max_mse_ </li>
</ul>
</dd></dl>
<div class="fragment"><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;{</div>
<div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;  <span class="comment">// only use triplet of points to simlify process (possible due to planar case)</span></div>
<div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;  pcl::Correspondences correspondences_temp = correspondences;</div>
<div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;  correspondences_temp.erase (correspondences_temp.end () - 1);</div>
<div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160; </div>
<div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;  <span class="comment">// estimate transformation between correspondence set</span></div>
<div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;  <a class="code" href="classpcl_1_1_registration.html#a99baaa7e513bda9103c58fd1471557ed">transformation_estimation_</a>-&gt;estimateRigidTransformation (*<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>, *<a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>, correspondences_temp, transformation);</div>
<div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160; </div>
<div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;  <span class="comment">// transform base points</span></div>
<div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;  PointCloudSource match_transformed;</div>
<div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;  <a class="code" href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">pcl::transformPointCloud</a> (*<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>, match_indices, match_transformed, transformation);</div>
<div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160; </div>
<div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;  <span class="comment">// calculate residuals of transformation and check against maximum threshold</span></div>
<div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;  std::size_t nr_points = correspondences_temp.size ();</div>
<div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;  <span class="keywordtype">float</span> mse = 0.f;</div>
<div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;  <span class="keywordflow">for</span> (std::size_t i = 0; i &lt; nr_points; i++)</div>
<div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;    mse += pcl::squaredEuclideanDistance (match_transformed.points [i], <a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>-&gt;points [base_indices[i]]);</div>
<div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160; </div>
<div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;  mse /= nr_points;</div>
<div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;  <span class="keywordflow">return</span> (mse &lt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a6828753c00b74ddbc3ffd58dd0028bef">max_mse_</a> ? 0 : -1);</div>
<div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_registration_html_a99baaa7e513bda9103c58fd1471557ed"><div class="ttname"><a href="classpcl_1_1_registration.html#a99baaa7e513bda9103c58fd1471557ed">pcl::Registration&lt; PointSource, PointTarget, float &gt;::transformation_estimation_</a></div><div class="ttdeci">TransformationEstimationPtr transformation_estimation_</div><div class="ttdoc">A TransformationEstimation object, used to calculate the 4x4 rigid transformation.</div><div class="ttdef"><b>Definition:</b> registration.h:547</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a6828753c00b74ddbc3ffd58dd0028bef"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a6828753c00b74ddbc3ffd58dd0028bef">pcl::registration::FPCSInitialAlignment::max_mse_</a></div><div class="ttdeci">float max_mse_</div><div class="ttdoc">Maximal mean squared errors of a transformation calculated from a candidate match.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:553</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a2e628406e7a4bfbc06754fc89da60c2b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2e628406e7a4bfbc06754fc89da60c2b">&#9670;&nbsp;</a></span>validateTransformation()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::validateTransformation </td>
          <td>(</td>
          <td class="paramtype">Eigen::Matrix4f &amp;&#160;</td>
          <td class="paramname"><em>transformation</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float &amp;&#160;</td>
          <td class="paramname"><em>fitness_score</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Validate the transformation by calculating the number of inliers after transforming the source cloud. The resulting fitness score is later used as the decision criteria of the best fitting match. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">transformation</td><td>updated orientation matrix using all inliers </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">fitness_score</td><td>current best fitness_score </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>fitness score is only updated if the score of the current transformation exceeds the input one. </dd></dl>
<dl class="section return"><dt>返回</dt><dd><ul>
<li>&lt; 0 if previous result is better than the current one (score remains)</li>
<li>= 0 current result is better than the previous one (score updated) </li>
</ul>
</dd></dl>

<p>被 <a class="el" href="classpcl_1_1registration_1_1_k_f_p_c_s_initial_alignment.html#abf29d8f4ebb1afeb346658f62a7ecbae">pcl::registration::KFPCSInitialAlignment&lt; PointSource, PointTarget, NormalT, Scalar &gt;</a> 重载.</p>
<div class="fragment"><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;{</div>
<div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;  <span class="comment">// transform source point cloud</span></div>
<div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;  PointCloudSource source_transformed;</div>
<div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;  <a class="code" href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">pcl::transformPointCloud</a> (*<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>, *<a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a6966b3505b739a38525a3aaeaeee99d9">source_indices_</a>, source_transformed, transformation);</div>
<div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160; </div>
<div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;  std::size_t nr_points = source_transformed.size ();</div>
<div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;  std::size_t terminate_value = fitness_score &gt; 1 ? 0 : <span class="keyword">static_cast &lt;</span>std::size_t<span class="keyword">&gt;</span> ((1.f - fitness_score) * nr_points);</div>
<div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160; </div>
<div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;  <span class="keywordtype">float</span> inlier_score_temp = 0;</div>
<div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;  std::vector &lt;int&gt; ids;</div>
<div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;  std::vector &lt;float&gt; dists_sqr;</div>
<div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;  PointCloudSourceIterator it = source_transformed.begin ();</div>
<div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160; </div>
<div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;  <span class="keywordflow">for</span> (std::size_t i = 0; i &lt; nr_points; it++, i++)</div>
<div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;  {</div>
<div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;    <span class="comment">// search for nearest point using kd tree search</span></div>
<div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;    <a class="code" href="classpcl_1_1_registration.html#a79b6170328705f29854aba00c4feb66d">tree_</a>-&gt;nearestKSearch (*it, 1, ids, dists_sqr);</div>
<div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;    inlier_score_temp += (dists_sqr[0] &lt; <a class="code" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a47552016a1a2acb533c95fd43f8b6167">max_inlier_dist_sqr_</a> ? 1 : 0);</div>
<div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160; </div>
<div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;    <span class="comment">// early terminating</span></div>
<div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;    <span class="keywordflow">if</span> (nr_points - i + inlier_score_temp &lt; terminate_value)</div>
<div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;      <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;  }</div>
<div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160; </div>
<div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;  <span class="comment">// check current costs and return unsuccessfull if larger than previous ones</span></div>
<div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;  inlier_score_temp /= <span class="keyword">static_cast &lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (nr_points);</div>
<div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;  <span class="keywordtype">float</span> fitness_score_temp = 1.f - inlier_score_temp;</div>
<div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160; </div>
<div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;  <span class="keywordflow">if</span> (fitness_score_temp &gt; fitness_score)</div>
<div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;    <span class="keywordflow">return</span> (-1);</div>
<div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160; </div>
<div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;  fitness_score = fitness_score_temp;</div>
<div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;  <span class="keywordflow">return</span> (0);</div>
<div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_registration_html_a79b6170328705f29854aba00c4feb66d"><div class="ttname"><a href="classpcl_1_1_registration.html#a79b6170328705f29854aba00c4feb66d">pcl::Registration&lt; PointSource, PointTarget, float &gt;::tree_</a></div><div class="ttdeci">KdTreePtr tree_</div><div class="ttdoc">A pointer to the spatial search object.</div><div class="ttdef"><b>Definition:</b> registration.h:485</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_f_p_c_s_initial_alignment_html_a47552016a1a2acb533c95fd43f8b6167"><div class="ttname"><a href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html#a47552016a1a2acb533c95fd43f8b6167">pcl::registration::FPCSInitialAlignment::max_inlier_dist_sqr_</a></div><div class="ttdeci">float max_inlier_dist_sqr_</div><div class="ttdoc">Maximal squared point distance between source and target points to count as inlier.</div><div class="ttdef"><b>Definition:</b> ia_fpcs.h:558</div></div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">类成员变量说明</h2>
<a id="a29206ec46e704609c2dd41337e17407a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a29206ec46e704609c2dd41337e17407a">&#9670;&nbsp;</a></span>coincidation_limit_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::coincidation_limit_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Maximal distance between coinciding intersection points to find valid matches. </p>
<dl class="section note"><dt>注解</dt><dd>Internally calculated using an estimation of the point density. </dd></dl>

</div>
</div>
<a id="a220d5b152bbde5a585be5d7f3228fe24"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a220d5b152bbde5a585be5d7f3228fe24">&#9670;&nbsp;</a></span>delta_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::delta_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Delta value of 4pcs algorithm (standard = 1.0). It can be used as: </p>
<ul>
<li>absolute value (normalization = false), value should represent the point accuracy to ensure finding neighbors between source &lt;-&gt; target</li>
<li>relative value (normalization = true), to adjust the internally calculated point accuracy (= point density) </li>
</ul>

</div>
</div>
<a id="a2861efeafe48b0000b9c3f40929a41af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2861efeafe48b0000b9c3f40929a41af">&#9670;&nbsp;</a></span>max_base_diameter_sqr_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::max_base_diameter_sqr_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Estimated squared metric overlap between source and target. </p>
<dl class="section note"><dt>注解</dt><dd>Internally calculated using the estimated overlap and the extent of the source cloud. It is used to derive the minimum sampling distance of the base points as well as to calculated the number of trys to reliable find a correct mach. </dd></dl>

</div>
</div>
<a id="a0fb2d738ed328e93f65073b0adb4ebbd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0fb2d738ed328e93f65073b0adb4ebbd">&#9670;&nbsp;</a></span>max_edge_diff_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::max_edge_diff_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Maximal difference between the length of the base edges and valid match edges. </p>
<dl class="section note"><dt>注解</dt><dd>Internally calculated using an estimation of the point density. </dd></dl>

</div>
</div>
<a id="a47552016a1a2acb533c95fd43f8b6167"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a47552016a1a2acb533c95fd43f8b6167">&#9670;&nbsp;</a></span>max_inlier_dist_sqr_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::max_inlier_dist_sqr_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Maximal squared point distance between source and target points to count as inlier. </p>
<dl class="section note"><dt>注解</dt><dd>Internally calculated using an estimation of the point density. </dd></dl>

</div>
</div>
<a id="a6828753c00b74ddbc3ffd58dd0028bef"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6828753c00b74ddbc3ffd58dd0028bef">&#9670;&nbsp;</a></span>max_mse_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::max_mse_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Maximal mean squared errors of a transformation calculated from a candidate match. </p>
<dl class="section note"><dt>注解</dt><dd>Internally calculated using an estimation of the point density. </dd></dl>

</div>
</div>
<a id="abb0c5e68f41b871eea5c4a0190801aa3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abb0c5e68f41b871eea5c4a0190801aa3">&#9670;&nbsp;</a></span>max_pair_diff_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::max_pair_diff_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Maximal difference between corresponding point pairs in source and target. </p>
<dl class="section note"><dt>注解</dt><dd>Internally calculated using an estimation of the point density. </dd></dl>

</div>
</div>
<a id="a79ee6d98864fca46bc61903e8b609120"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a79ee6d98864fca46bc61903e8b609120">&#9670;&nbsp;</a></span>nr_threads_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget , typename NormalT  = pcl::Normal, typename Scalar  = float&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">pcl::registration::FPCSInitialAlignment</a>&lt; PointSource, PointTarget, <a class="el" href="structpcl_1_1_normal.html">NormalT</a>, Scalar &gt;::nr_threads_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Number of threads for parallelization (standard = 1). </p>
<dl class="section note"><dt>注解</dt><dd>Only used if run compiled with OpenMP. </dd></dl>

</div>
</div>
<hr/>该类的文档由以下文件生成:<ul>
<li>registration/include/pcl/registration/<a class="el" href="ia__fpcs_8h_source.html">ia_fpcs.h</a></li>
<li>registration/include/pcl/registration/impl/<a class="el" href="ia__fpcs_8hpp_source.html">ia_fpcs.hpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><b>pcl</b></li><li class="navelem"><b>registration</b></li><li class="navelem"><a class="el" href="classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html">FPCSInitialAlignment</a></li>
    <li class="footer">制作者 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
  </ul>
</div>
</body>
</html>
